tf.gradients和tf.train.Optimizer.compute_gradient之间有什么区别?

时间:2017-07-27 09:53:36

标签: tensorflow

似乎tf.gradients也允许计算雅可比行列式,即一个张量的每个条目的偏导数。另一个张量的每个条目,而tf.train.Optimizer.compute_gradient仅计算实际的渐变,例如标量值wrt的偏导数。特定张量或wrt的每个条目。一个特定的标量。如果tf.gradients也实现了该功能,为什么还有一个单独的函数?

1 个答案:

答案 0 :(得分:5)

tf.gradients不允许你计算雅可比行列式,它会为每个输出聚合每个输入的梯度(类似于实际雅可比矩阵的每列的总和)。事实上,没有好的"在TensorFlow中计算雅可比人的方法(基本上你必须在每个输出see this issue)调用tf.gradients一次。

关于tf.train.Optimizer.compute_gradients,是的,它的结果基本相同,但是自动处理一些细节并且输出格式稍微方便一些。如果你看一下the implementation,你会看到它的核心是对tf.gradients的调用(在这种情况下,别名为gradients.gradients),但它对优化器实现有用周围的逻辑已经实施。此外,将它作为一种方法允许子类中的可扩展行为,要么实现某种优化策略(实际上不太可能在compute_gradients步骤),要么用于辅助目的,如跟踪或调试。