在TensorFlow中,变量(tf.Variable)的作用就是保存和更新神经网络的参数。在神经网络中,给变量赋予随机数最为常见,所以一般使用随机数给TensorFlow的变量初始化。
import tensorflow as tf
#定义矩阵变量weights,2X3的矩阵,矩阵中元素的均值为0,标准差为2。
weights = tf.Variable(tf.random_normal([2,3],stddev=2))
sess = tf.Session()
#Tensorflow中,所有变量都必须初始化才能使用
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(weights))
1、tf.random_normal 正态分布随机数
2、tf.truncated_normal 正态分布,但如果随机出来的值偏离值超过2个标准差,那么这个数将会被重新随机
3、tf.random_uniform 均匀分布
4、tf.random_gamma Gamma 分布
weights = tf.Variable(tf.random_normal([2,3],stddev =2))
weights1 = tf.Variable(tf.truncated_normal([2,3],stddev =2))
weights2 = tf.Variable(tf.random_uniform([2,3]))
weights3 = tf.Variable(tf.random_gamma([2,3],alpha =[0.5, 1.5] ))
sess = tf.Session()
'''运行sess.run()前要记得初始化所有的变量:对于constant定义的变量可以不初始化,但是Variable的变量一定要初始化'''
init_ = tf.global_variables_initializer()
sess.run(init_)
print(sess.run(weights))
print(sess.run(weights1))
print(sess.run(weights2))
print(sess.run(weights3))
TensorFlow也支持常数来初始化一个变量。
1、tf.constant 产生一个给定值的常量
2、tf.zeros(shape,dtype) 产生全为0的数组
3、tf.ones 产生全为1的数组
4、tf.fill 产生一个全部为给定数值的数组
bb1= tf.constant([1])
bb2 = tf.zeros([2,2])
bb3 = tf.ones([2,2])
bb4 = tf.fill([2,2],5)
print(weights)
sess = tf.Session()
'''运行sess.run()前要记得初始化所有的变量:对于constant定义的变量可以不初始化,但是Variable的变量一定要初始化'''
init_ = tf.global_variables_initializer()
sess.run(init_)
print(sess.run(bb1))
print(sess.run(bb2))
print(sess.run(bb3))
print(sess.run(bb4))
在神经网路中,偏执项(bias)通常会使用常数来设置初始值。
init_ = tf.global_variables_initializer()
sess.run(init_)
biases = tf.Variable(tf.zeros([2,2]))
sess.run(biases )
前向传播过程
import tensorflow as tf
#声明w1,w2两个变量,这里还通过seed固定随机种子,保证每次运行的结果一样
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是一个1*2的矩阵
x = tf.constant([[0.7,0.9]])
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(y))
sess.close()
维度变量是一个重要的属性,和类型不大一样,维度在运行中是可能改变的,但是需要设定参数validate_shape =False
w11 = tf.Variable(tf.random_normal([2,3],stddev=1,seed =1))
w22 = tf.Variable(tf.random_normal([3,1],stddev=1,seed =1))
#tf.assign(w11,w22)会报错,shape不匹配
tf.assign(w11,w22,validate_shape =False)#可以调整