Tensorflow变量是否必不可少?

时间:2018-01-01 07:06:24

标签: python tensorflow

我非常理解Tensorflow中的Variable的概念(我认为),但我仍然没有发现它们非常有用。我阅读它的主要原因是使用它们以后恢复它们很有意思,这在某些情况下可能很方便,但是你可以使用numpy.save来保存矩阵和值,或者甚至将它们写出来获得类似的结果在日志文件中。

变量用于保存Tensors,但您可以使用Python变量来保存它们,避免使用Tensorflow的可变额外包装器。

使用get_variable函数时,变量变得很好,因为代码比使用字典存储权重更清晰,但是,就功能而言,我不明白为什么它们很重要。

我对TF变量的结论是它们帮助我们编写更好的代码,但它们并不重要。对它们有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用tf.Variable的主要好处是,您不必在训练神经网络时明确说明要优化的内容。从机器学习的角度来看,Variable是网络参数(或权重),它们在训练之前具有一些初始值但在训练期间得到优化(损失的梯度是根据变量计算并使用优化算法,他们的变量被更新。(着名的等式w = w - alpha*dL_dw用于SGD算法)。

相反,tf.constant用于存储那些不打算丢失梯度的网络参数。在训练期间,不计算相对于常数的损失梯度,因此不更新它们的值。为了向网络提供输入,我们使用tf.placeholder

它们是必不可少的吗?是。深度神经网络在数十个变量中有数百万个参数,尽管可以

  1. 定义具有一些初始值的张量(基于一些启发式算法,如Glorot初始化)
  2. 计算相对于每个损失的梯度(可能使用for循环)
  3. 基于某些优化算法(例如,SGD)更新其值
  4. 要特别注意不要留下任何一个,
  5. 明智的人只会使用Variables并让魔法发生。毕竟,更多和杂乱的代码意味着更多的错误机会。