zoukankan      html  css  js  c++  java
  • tensorflow笔记(北大网课实战)

    1、

    tf.multiply(x,y1)      # 对应元素相乘
     tf.matmul(x,y2)        # 矩阵相乘

    2、会话:执行计算图中的节点运算的。

    with tf.Session() as sess:

       print sess.run(y)

    3、参数:就是权重w,用变量表示。随机给初值。

    w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))

    正态分布,                                         标准差为2     均值是0

    tf.truncated_normal()  去掉过大偏离点的正态分布

    4、前向传播:搭建模型,实现推理

    输入层,隐藏层,输出层

    5、变量初始化、计算图节点运算,都要用会话实现:

    变量初始化:

    init_op=tf.global_variables_initializer()

    sess.run(init_op)

    计算图节点运算:在sess.run函数中用feed_dict喂数据

    6、用tf.placeholder占位,在sess.run函数中用feed_dict喂数据

    喂一组数据:      

    x=tf.placeholder(tf.float32,shape=(1,2))   多组数据的话,把1改成None

          sess.run(y,feed_dict={x:[[0.5,0.6]]})

    import tensorflow as tf
    
    x = tf.placeholder(tf.float32,shape=(None,2))
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        print(sess.run(y,feed_dict={x: [[0.7, 0.5],[0.2,0.3],
                                        [0.3,0.4],[0.4,0.5]]}))
        print(sess.run(w1))
        print(sess.run(w2))

    7、反向传播:训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据对上的

    损失函数最小。

    损失函数(loss):预测值y与已知答案y_的差距

    均方误差MSE

    loss=tf.reduce_mean(tf.square(y_-y))

    反向传播训练方法:以减小loss值为优化目标

    学习率 :决定参数每次更新的幅度

    import tensorflow as tf
    import numpy as np
    
    BATCH_SIZE = 8  #一次喂入的数据
    seed = 23455
    
    rng = np.random.RandomState(seed)
    X=rng.rand(32,2)
    Y=[[int(x0 + x1 < 1)] for (x0,x1) in X]
    print(X)
    print(Y)
    
    x = tf.placeholder(tf.float32, shape=(None,2))#体积和重量两个特征
    yy= tf.placeholder(tf.float32,shape=(None,1))#只有一个特征,合格或者不合格
    
    w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
    w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
    
    a=tf.matmul(x,w1)
    y=tf.matmul(a,w2)
    
    #定义损失函数及反向传播方法
    loss = tf.reduce_mean(tf.square(yy-y))
    train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)#学习率为0.001
    
    with tf.Session() as sess:
        init_op=tf.global_variables_initializer()
        sess.run(init_op)
        print(sess.run(w1))
        print(sess.run(w2))
    
        #训练模型
        STEPS=3000#训练三千轮
        for i in range(STEPS):
            start = (i*BATCH_SIZE)%32
            end = start+BATCH_SIZE
            sess.run(train_step, feed_dict={x: X[start:end],yy: Y[start: end]})
            if i % 500 == 0:  #每500轮打印一次loss值
               total_loss = sess.run(loss,feed_dict={x: X, yy: Y})
               print(i,total_loss)
            print(sess.run(w1))
            print(sess.run(w2))

    8、搭建神经网络的八股:准备、前传、反传、迭代

    (1)准备:import ;常量定义;生成数据集

    (2)前向传播:定义输入、参数和输出

    (3)反向传播:定义损失函数,反向传播方法

    loss =       train_step =

    (4)生成会话,训练STEPS轮

    9、损失函数

     NN复杂度:多用NN层数和NN参数的个数表示

    层数=隐藏层的层数+1个输出层

    总参数=总w+总b

    自定义损失函数:

     交叉熵:表征两个概率分布之间的距离

     10、学习率:每次参数更新的幅度

    学习率设置多少合适?指数衰减率 

     11、滑动平均(影子值)

    记录了每个参数一段时间内过往值得平均,增加了模型的泛化性。

    针对所有参数:w、b

     

  • 相关阅读:
    Java 环境搭建的一些问题
    DefaultHttpClient is deprecated 【Api 弃用]】
    Java良葛格 学习笔记《二》
    Java良葛格 学习笔记
    JAVA EE 运行环境配置(包含JAVA SE)
    AIR使用文件对象操作文件和目录
    As3.0 类的【枚举】
    Java&&As3.0 中的final 关键字
    字符串参数组合
    PHP 超级全局变量
  • 原文地址:https://www.cnblogs.com/h694879357/p/12291810.html
Copyright © 2011-2022 走看看