TensorFlow如何计算tf.train.GradientDescentOptimizer的渐变?

时间:2016-09-19 19:10:42

标签: python optimization tensorflow gradient

我试图了解TensorFlow如何计算tf.train.GradientDescentOptimizer的渐变。

如果我理解TensorFlow白皮书中的4.1节是正确的,它会通过向TensorFlow图添加节点来计算基于反向传播的渐变,TensorFlow图计算原始图中节点的推导。

  

当TensorFlow需要相对于C所依赖的某个张量I计算张量C的梯度时,它首先在I到C的计算图中找到路径。然后它从C回溯到I,并且每个在向后路径上操作它向TensorFlow图添加一个节点,使用链规则沿着向后路径组成部分梯度。新添加的节点计算前向路径中相应操作的“梯度函数”。可以通过任何操作来注册梯度函数。此函数不仅将已沿逆向路径计算的部分梯度作为输入,还可选择输入正向操作的输入和输出。 [Section 4.1 TensorFlow whitepaper]

问题1:每个TensorFlow节点是否有第二个节点实现,它表示原始TensorFlow节点的派生?

问题2:有没有办法可视化哪些派生节点被添加到图表(或任何日志)?

1 个答案:

答案 0 :(得分:5)

每个节点都有相应的方法来计算backprop值(使用Python中的@ ops.RegisterGradient(“Sum”)注册)

您可以使用方法here

显示图表

但请注意,由于自动微分代码适用于各种条件,因此它创建的图形非常复杂,并且看起来不是很有用。对于可以用1-2个节点实现的简单梯度计算,有10个ops节点并不罕见