主要参考这里点击打开链接,当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。
当创建一个变量时,你将一个张量
作为初始值传入构造函数Variable()
。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。
注意,所有这些操作符都需要你指定张量的shape。那个形状自动成为变量的shape。变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整其行列数。
初始化
变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。
使用tf.initialize_all_variables()
添加一个操作对变量做初始化。记得在完全构建好模型并加载之后再运行那个操作。
栗子:
import tensorflow as tf
a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')
a2 = tf.Variable(tf.constant(1), name='a2')
a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("a1 is %s\n"%(a1))
print("a1 value is =\n%s\n"%sess.run(a1))
print("a2 is %s\n"%(a2))
print("a2 value is =\n%s\n"%sess.run(a2))
print("a3 is %s\n"%(a3))
print("a3 value is =\n%s\n"%sess.run(a3))
由另一个变量初始化
用其它变量的值初始化一个新的变量时,使用其它变量的initialized_value()
属性。你可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。
栗子:
import tensorflow as tf
a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')
a2 = tf.Variable(tf.constant(1), name='a2')
a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')
a4=tf.Variable(a1.initialized_value(),name='a4')#这里用a1变量初始化a4
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("a1 is %s\n"%(a1))
print("a1 value is =\n%s\n"%sess.run(a1))
print("a2 is %s\n"%(a2))
print("a2 value is =\n%s\n"%sess.run(a2))
print("a3 is %s\n"%(a3))
print("a3 value is =\n%s\n"%sess.run(a3))
print("a4 is %s\n"%(a4))
print("a4 value is =\n%s\n"%sess.run(a4))