【发布时间】:2020-06-08 14:39:09
【问题描述】:
tf.stop_gradient 是否真的有助于节省 GPU 内存。我在问,因为 stop_gradient 后面的层的一些中间输出可能不需要存储(否则梯度计算是必需的)。
【问题讨论】:
-
我认为应该这样做,因为中间张量将不再用于累积梯度。
标签: python tensorflow deep-learning neural-network gradient
tf.stop_gradient 是否真的有助于节省 GPU 内存。我在问,因为 stop_gradient 后面的层的一些中间输出可能不需要存储(否则梯度计算是必需的)。
【问题讨论】:
标签: python tensorflow deep-learning neural-network gradient
是的,它节省了 GPU 内存。在tf.stop_gradient 的文档中,它指出在构建计算梯度的操作时,此操作会阻止考虑其输入的贡献。
关于tf.stop_gradient()的更多解释:它是一个操作,充当forward direction中的identity function,但阻止累积的gradient流过backward direction中的该运算符。它不会完全阻止backpropagation,而是阻止单个张量对为表达式计算的gradients 做出贡献。
这意味着传递给tf.stop_gradient的操作中包含的权重在反向传播期间不会更新。
通常,在反向传播期间,权重使用公式更新,
W(i+1) = W(i) - Learning Rate * Gradient
当我们使用tf.stop_gradient 时,作为输入传递给此操作的权重将保持为常量。由于Back Propagation 期间的计算减少了,内存消耗也减少了。
有关tf.stop_gradient的更多信息,请参考Tensorflow documentation、Abhishek's Stack Overflow Answer、mrry's Stack Overflow Answer和this article。
希望这会有所帮助。快乐学习!
【讨论】: