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



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

tf.gradients

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

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

最新更新