第三天
tensorflow实现神经网络
tensorflow游乐场及神经网络简介
http://playground.tensorflow.org tensorflow游乐场网站
前向传播算法的学习
tf.matmul实现了矩阵乘法的功能
import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
x=tf.constant([[0.7,0.9]])
#前向传播算法获得神经网络的输出
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
sess=tf.Session()
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(y))
sess.close()
解析:
tf.random_normal([2,3],stddev=1)会产生一个2*3的矩阵,矩阵的标准差为1,均值为0的随机数。均值可以通过mean来设置,默认为0
反向传播就是一个迭代的过程,先根据前向传播算法得出的值和正确答案的距离。基于这个距离,反向传播会相应更新神经网络参数的取值,使得最后预测结果与答案更加接近
tensorflow提供了placeholder机制用于提供输入数据
tf.initialize_all_variables()初始化所有参数
程序优化如下:
import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
x=tf.placeholder(tf.float32,shape=(1,2),name="input")
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
sess=tf.Session()
init_op=tf.initialize_all_variables()
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.9]]}))
sess.close()
训练神经网络的三个步骤
- 定义神经网络的结构和前向传播的输出结果
- 定义损失函数以及选择反向传播优化的算法
- 生成会话并且在训练数据上反复运行反向传播优化算法