![TensorFlow神经网络到深度学习](https://wfqqreader-1252317822.image.myqcloud.com/cover/747/38209747/b_38209747.jpg)
1.4 变量
当训练模型时,用变量来存储和更新参数。变量包含张量(Tensor),它存放在内存的缓存区中。在建模时张量需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析时被加载。
本节介绍以下两个TensorFlow类:
·tf.Variable类
·tf.train.Saver类
1.创建
当创建一个变量时,需要将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。
注意,所有这些操作符都需要指定张量的shape。变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整其行列数。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_23_1.jpg?sign=1739292875-dPiQwHDCQYHTBit0SgeqC80Txf4V50b6-0-693d9bdc020dbf31d6a214035e6a0737)
在以上代码中,调用tf.Variable()添加一些操作(op,operation)到graph:
·一个tf.Variable操作存放变量的值;
·一个初始化op将变量设置为初始值;
·初始值的操作,如示例中对biases变量的zeros操作也被加入了graph。
tf.Variable()的返回值是Python的tf.Variable类的一个实例。
2.初始化
变量的初始化必须在模型的其他操作运行之前先明确完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行此操作。
使用tf.initialize_all_variables()添加一个操作对变量进行初始化。记得在完全构建好模型并加载之后再运行此操作。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_23_2.jpg?sign=1739292875-7voW8qq0dLzaJzhm6IQN6VX2vCZGGnTa-0-aa6386cea439b3dd8ab48f00f23c2107)
3.由另一个变量初始化
我们有时候会需要用另一个变量的初始化值给当前变量初始化。由于tf.initialize_all_variables()并行地初始化所有变量,所以在有这种需求的情况下需要小心。
用其他变量的值初始化一个新的变量时,使用其他变量的initialized_value()属性。我们可以直接把已初始化的值作为新变量的初始值,或者把它当成Tensor计算得到的一个值赋予新变量。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_1.jpg?sign=1739292875-SgckKLtBc4ZeRyVGpkHwWnz8JRnTXGb7-0-83ad2f765c0ef2f80fa5c063c1811687)
4.保存变量
在TensorFlow中,可用tf.train.Saver()创建一个Saver来管理模型中的所有变量。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_2.jpg?sign=1739292875-5XGmEIN9yekR3nMlo7Flet4fLLN79n1i-0-2256f38c7fc221f5fc346f2b23874835)
5.恢复变量
在TensorFlow中,可用同一个Saver对象来恢复变量。注意,当用户从文件中恢复变量时,不需要事先对它们进行初始化。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_3.jpg?sign=1739292875-tCFRqYkJvU0d6Iw5oTlTrlzGmVFu2SOd-0-58457a10e6f684374a4f88b06d5dddc6)
下面的例子演示了如何使用变量实现一个简单的计数器。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_25_1.jpg?sign=1739292875-ROTegg1r2JGEFicU6jrijdNOnb1nI94Q-0-2673f786b2b3ff0cfd52c73b324dc097)
运行程序,输出如下:
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_25_2.jpg?sign=1739292875-WXEEJINoGK0jhqxp7kR8fvpLGS47NPWd-0-86617f4285b14e84d05d2165fd5e39b3)