
1.4 变量
当训练模型时,用变量来存储和更新参数。变量包含张量(Tensor),它存放在内存的缓存区中。在建模时张量需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析时被加载。
本节介绍以下两个TensorFlow类:
·tf.Variable类
·tf.train.Saver类
1.创建
当创建一个变量时,需要将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。
注意,所有这些操作符都需要指定张量的shape。变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整其行列数。

在以上代码中,调用tf.Variable()添加一些操作(op,operation)到graph:
·一个tf.Variable操作存放变量的值;
·一个初始化op将变量设置为初始值;
·初始值的操作,如示例中对biases变量的zeros操作也被加入了graph。
tf.Variable()的返回值是Python的tf.Variable类的一个实例。
2.初始化
变量的初始化必须在模型的其他操作运行之前先明确完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行此操作。
使用tf.initialize_all_variables()添加一个操作对变量进行初始化。记得在完全构建好模型并加载之后再运行此操作。

3.由另一个变量初始化
我们有时候会需要用另一个变量的初始化值给当前变量初始化。由于tf.initialize_all_variables()并行地初始化所有变量,所以在有这种需求的情况下需要小心。
用其他变量的值初始化一个新的变量时,使用其他变量的initialized_value()属性。我们可以直接把已初始化的值作为新变量的初始值,或者把它当成Tensor计算得到的一个值赋予新变量。

4.保存变量
在TensorFlow中,可用tf.train.Saver()创建一个Saver来管理模型中的所有变量。

5.恢复变量
在TensorFlow中,可用同一个Saver对象来恢复变量。注意,当用户从文件中恢复变量时,不需要事先对它们进行初始化。

下面的例子演示了如何使用变量实现一个简单的计数器。

运行程序,输出如下:
