美文网首页tensflow
tensorflow学习笔记0

tensorflow学习笔记0

作者: 山横烟聚 | 来源:发表于2018-11-28 20:58 被阅读71次

    将以更总结性质的方式来做tensorflow笔记,作为理解神经网络的途径。
    不是做字典,也不是摘抄。
    为了识别代码括号内是空还是有数值,如果不作说明,我会在可以填写内容的括号内填写案例。


    张量的创建

    • 常量:tf.constant([[2.0],[1.0]])
    • 变量:tf.Variable()
      一般对于参数w,需要先随机生成这些参数来进行初始化。往往在tf.Variable中加入生成方式。有tf.random_normal([1,2],stddev=1,mean=0,seed=1)tf.fill等方式。
    • 占位:tf.placeholder(tf.float32,shape=(1,2))
      相当于创建一个给定大小的空矩阵,在输入数据数量不确定时,可以用None来空出形状,比如tf.placeholder(tf.float32,shape=(None,2))

    前向传播

    传播需要用到矩阵相乘的命令,为tf.matmul(A,B),很好理解,即为Matrix Multiply的缩写。注意,相乘的两个张量是没有经过转置的。不像是(A,B)=A^TB 而是(A,B)=AB 值得一提的是,对于输入和权重张量来说,输入X_{n\times i}表示有n组数据,每个数据有i个分量。而对于权重矩阵W_{n_j\times n_{j+1}},下标分别为该层神经网络的神经元数和下一层神经网络的神经元数。

    所以,假设有一个2\times 3 \times 1的神经网络,第一个为数据的维数,第二为隐藏层的神经元,第三个为输出层。则易知输入数据的shape为(1,2),输入层到第一隐藏层的权重矩阵为(2,3),第一隐藏层到输出层的权重矩阵为(3,1),传播过程如下:

    a = tf.matmul(x,w1)
    y = tf.matmul(a,w2)
    

    会话

    首先这是tensorflow库下的一个字库,为tf.Session(),在创建会话时为了一种简洁性,往往使用with as语句来创建一个临时的调用窗口,即with tf.Session() as sess:

    • 在Session子库下,可调用函数run来获得指定的值,即sess.run(y)
    • 在计算结果之前,需要对变量进行初始化,依然是基于run()函数,在里面添加tf.global_variable_initializer,实现对变量的初赋值。一般我们会给所有待优化的初始化函数赋值给一个变量,如
    init_op=tf.global_variable_initializer()
    sess.run(init_op)
    
    • 在计算需要的结果时,如果没有定义输入数据集,则要通过feed_dict函数来喂数据。在run中进行,代码为sess.run(y,feed_dict={x:[1.0,2.0]})
      对喂入的数据数量没有要求,可以喂多组数据,在没有反向传播时,获得多个输出值。

    反向传播

    反向传播是根据目标函数来对参数进行调整。

    • 一般目标是使得损失函数最小,损失函数根据具体问题来定义,代码示例loss=tf.reduce_mean(tf.square(y_-y))
    • 有了损失函数之后,需要训练方法,也就是调整的逻辑。有梯度下降、momentum优化器、adam优化器等优化方法;代码示例为train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
      需要设定训练方法、训练率、优化目标三个主要内容。

    相关文章

      网友评论

        本文标题:tensorflow学习笔记0

        本文链接:https://www.haomeiwen.com/subject/mgttcqtx.html