![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=1734415501-dXH8KxyMEVSnoDWxY68XWj6QY3sAAFF5-0-870ded955d30e12f24cf89175dd9c314)
在以上代码中,调用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=1734415501-jLUhUInZ61EhuzXGxhNVsBbKblwme6RY-0-d148fbd1f03bf708f9fe42fb8b274087)
3.由另一个变量初始化
我们有时候会需要用另一个变量的初始化值给当前变量初始化。由于tf.initialize_all_variables()并行地初始化所有变量,所以在有这种需求的情况下需要小心。
用其他变量的值初始化一个新的变量时,使用其他变量的initialized_value()属性。我们可以直接把已初始化的值作为新变量的初始值,或者把它当成Tensor计算得到的一个值赋予新变量。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_1.jpg?sign=1734415501-FRJPVe5vkEGxD57GH6Mx6yHeaMf9w8pa-0-8ac397860e3a592a25f7f045183eaee5)
4.保存变量
在TensorFlow中,可用tf.train.Saver()创建一个Saver来管理模型中的所有变量。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_2.jpg?sign=1734415501-zax4CHebYjdg5uS3OI89CAnKeoYc4hvN-0-9d7d0c0a5610ae2d18879a430c8a1fea)
5.恢复变量
在TensorFlow中,可用同一个Saver对象来恢复变量。注意,当用户从文件中恢复变量时,不需要事先对它们进行初始化。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_24_3.jpg?sign=1734415501-lErPpjFnFu0WONPxwCpXmrE6w487xyJT-0-a804b72f38e6c2d8149949acabedf63e)
下面的例子演示了如何使用变量实现一个简单的计数器。
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_25_1.jpg?sign=1734415501-z1z6qkhNomnzuhPnIaEZjvaCOS7IJMEF-0-9f4e9a5b7d5f9648772d58c63279c5c4)
运行程序,输出如下:
![](https://epubservercos.yuewen.com/CDA2CB/20118172708702706/epubprivate/OEBPS/Images/40919_25_2.jpg?sign=1734415501-8SDAIC0Jg6JBBDrxwWnhuyByo4J4y4KD-0-825d18429d4dcd17d94803e04ae5089c)