您的位置:首页 > 理论基础 > 计算机网络

【TensorFlow】神经网络参数与变量(四)

2017-12-12 00:20 393 查看
在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)#可以调整
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: