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

Len*_*oyt 4 tensorflow

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

jde*_*esa 5

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

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