使用tensorflow创建一个简单的三层神经网络(1)
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)