我非常理解Tensorflow中的Variable的概念(我认为),但我仍然没有发现它们非常有用。我阅读它的主要原因是使用它们以后恢复它们很有意思,这在某些情况下可能很方便,但是你可以使用numpy.save来保存矩阵和值,或者甚至将它们写出来获得类似的结果在日志文件中。
变量用于保存Tensors,但您可以使用Python变量来保存它们,避免使用Tensorflow的可变额外包装器。
使用get_variable函数时,变量变得很好,因为代码比使用字典存储权重更清晰,但是,就功能而言,我不明白为什么它们很重要。
我对TF变量的结论是它们帮助我们编写更好的代码,但它们并不重要。对它们有什么想法吗?
答案 0 :(得分:2)
使用tf.Variable
的主要好处是,您不必在训练神经网络时明确说明要优化的内容。从机器学习的角度来看,Variable
是网络参数(或权重),它们在训练之前具有一些初始值但在训练期间得到优化(损失的梯度是根据变量计算并使用优化算法,他们的变量被更新。(着名的等式w = w - alpha*dL_dw
用于SGD算法)。
相反,tf.constant
用于存储那些不打算丢失梯度的网络参数。在训练期间,不计算相对于常数的损失梯度,因此不更新它们的值。为了向网络提供输入,我们使用tf.placeholder
。
它们是必不可少的吗?是。深度神经网络在数十个变量中有数百万个参数,尽管可以
for
循环)Variables
并让魔法发生。毕竟,更多和杂乱的代码意味着更多的错误机会。