google实战介绍了tensorflow游乐场的使用以及前项传播算法,本文不总结深度学习算法内容,在已掌握深度学习基础知识后总结tensorflow实现其算法的相关内容。(也就是tensorflow各函数的具体用法,深度学习基础知识根据NG的课程学习)
神经网络前向传播过程:
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
tf.matmul(a,b)实现了矩阵的乘法功能。
TensorFlow 变量
TensorFlow中的变量需要指定初始值,在神经网络中给参数富裕随机初始值最为常见,所以一般也使用随机数给TensorFlow中的变量初始化。
在TensorFlow中声明一个2*3的矩阵变量的方法:
weights = tf.Variable(tf.random_normal([2,3],stddev=2))
变量声明函数tf.Variable(),在变量声明函数中给出了变量初始化的方法:产生一个2*3矩阵,矩阵中的元素是均值为0,标准差为2的随机数。TensorFlow中变量的初始值可以设置成随机数、常数、或者是通过其他变量的初始值计算得到。
实现前向传播的代码:
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()
assign函数:
assign (
ref ,
value ,
validate_shape = None ,
use_locking = None ,
name = None
)
通过将 “value” 赋给 “ref” 来更新 “ref”。
此操作输出在赋值后保留新值 “ref” 的张量。这使得更易于链接需要使用重置值的操作。
一个变量在构建后类型不能再改变,通过assign函数重新赋值时需要注意类型是否相符,同时维度如果不符要将validate_shape设置为False,assign语句才能正常运行。
w1=tf.Variable(tf.random_normal([2,3],stddev=1,name='w1'))
w2=tf.Variable(tf.random_normal([2,3],dtype=tf.float64,stddev=1,name='w2'))
w1.assign(w2)
程序由于w1 w2类型不符 出现错误
w1=tf.Variable(tf.random_normal([2,3],stddev=1,name='w1'))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,name='w2'))
tf.assign(w1,w2)
此时会报维度不匹配错误信息,改为:
tf.assign(w1,w2,validate_shape=False)
可将w2的值赋给w1