TensorFlow技术帖

使用tensorflow创建一个简单的三层神经网络(1)

2017-12-26  本文已影响6人  MR天亮了灬

 1假如一个零件的好坏是由零件的长度和零件的质量决定的,用零件的长度和质量描述每个零件的特征向量(feature vector),也就是神经网络的输入向量。我们以此来构建一个简单的三层神经网络,来获取途中的结果Y,然后设定一个阈值,如果Y大于这个阈值则合格,小于则不合格

判断零件是否合格的三层神经网络的前向传播

神经网络的前向传播的tensorflow实现


   import tensorflowas tf

  # 定义变量

  w1 = tf.Variable(tf.random_normal([2,3],stddev=1),name="w1")  #初始化第一层和第二层的连线权重

  w2 = tf.Variable(tf.random_normal([3,1],stddev=1),name="w2") #初始化第二层和第三层的连线权重

  biases1 = tf.Variable(tf.zeros([3]),name="b1")   # 隐藏层的偏向bias    [ 0. 0. 0.]

  biases2 = tf.Variable(tf.zeros([1]),name="b1")   # 输出层的偏向bias   [0.]

  x = tf.constant([[0.7,0.9]])   #定义一个零件的输入向量,长度为0.7,质量为0.9

     这里定义了一个2x3方差为1,均值为0的均匀分布的矩阵向量w1和3x1均匀分布的w2,当然此时我们打印w1和w2时得到的却是

<tf.Variable 'w1:0' shape=(2,3) dytype=float32_ref>,这是因为此时创建的只是一个张量(tensor)的结构,一个张量保存了三个属性:名字(name),维度(shape)和类型(type)

     # 定义前向传播

    # a = tf.matmul(x,w1)+biases1

    # y = tf.matmul(a,w2)+biases2

tf.matmul()实现向量的点乘,a为隐藏层的值,是3x1的矩阵向量,y为输出层的值,当然此时的y仍然只是的到张量的结构,此时的w1和w2并没有被初始化,可以理解为只是结构的向前传播,得到y为1x1的张量

tensorflow的Session


   那么如何让结构的前向传播转为真实数值的传播呢,这时候会引入tf.Session(会话)的概念

   with tf.Session() as sess:

         init_op = tf.global_variables_initializer()    #初始化所有的变量

         sess.run(init_op)  # 运行所有的结果

         print sess.run(y)

这样就会计算出输出层前向传播的值   [[-1.46060801]]   ,不再是结构

完整代码:

import tensorflowas tf

# 定义变量

w1 = tf.Variable(tf.random_normal([2,3],stddev=1),name="w1")

w2 = tf.Variable(tf.random_normal([3,1],stddev=1),name="w2")

biases1 = tf.Variable(tf.zeros([3]),name="b1")   # 隐藏层的偏向bias    [ 0. 0. 0.]

biases2 = tf.Variable(tf.zeros([1]),name="b1")   # 输出层的偏向bias   [0.]

x = tf.constant([[0.7,0.9]])

# 定义前向传播

a = tf.matmul(x,w1) + biases1

y = tf.matmul(a,w2) + biases2

# 调用会话函数输出

with tf.Session()as sess:

    init_op = tf.global_variables_initializer()

   sess.run(init_op)

   print sess.run(y)

上一篇下一篇

猜你喜欢

热点阅读