先把程序放上:
#coding:utf-8
#用 placeholder 实现输入定义(sess.run 中喂入一组数据)的情况
#第一组喂体积 0.7、重量 0.5
import tensorflow as tf
#定义输入和参数
x=tf.placeholder(tf.float32,shape=(1,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("y in tf3_3.py is:")
print(sess.run(y,feed_dict={x:[[0.7,0.5]]}) )
首先我们先看一下这个神经网络的结构:
输入数据是一个1行两列的数据。
w1参数(注意这里的w1就不是一个参数了,而是一个层面的参数)层面是一个矩阵,为2行3列,我们先画出输入数据和第一个隐含层的结构:
我们可以看到,隐含层的三个数是由x1和x2计算得到的,一共有6条线,正好对应了2*3的矩阵。
虽然不知道怎么排列也没有关系,不过学习最好是做到知根知底。这里详细列一下:
相应的矩阵:
[x1 x2] [a11] [a21] [a31]
[a12] [a22] [a32]
看到这里我想大家对结构就很了解了。
这样会输出一个1行3列的数组。然后进入下一个隐含层。
用于计算的设置的函数如下:
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
- shape: 一维的张量,也是输出的张量。
- mean: 正态分布的均值。
- stddev: 正态分布的标准差。
- dtype: 输出的类型。
- seed: 一个整数,当设置之后,每次生成的随机数都一样。
- name: 操作的名字
然后我们定义了前项操作的顺序,就是一系列的矩阵运算的结合。
计算图设计好了之后就是通过会话来进行计算了。
要首先初始化所有的
init_op=tf.global_variables_initializer()
因为在有tf.Variable代码运行的程序中,因为tf中建立的随机变量是没有被初始化的,参考别人所说,在运行时它还不是一个tensor量,而是一个Variable变量类型,所以需要先进行初始化。
然后我们运行,查看结果。
y in tf3_3.py is:
[[3.0904665]]
输出数据是一个,对应了我们隐含层的矩阵 3行1列,在一系列矩阵运算后是一个1行1列的矩阵(注意不是一个数,这也是矩阵)。
还可以设置多个输入变量:
x=tf.placeholder(tf.float32,shape=(None,2))
首先不确定输入变量的行数。
然后在运行中加入输入量:
sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}
就可以同时计算输出好几个数据。