2017-07-27 41 views
2

似乎tf.gradients允許也計算雅可比行列式,即一張張量的每個條目的偏導數。另一個張量的每個條目,而tf.train.Optimizer.compute_gradient只計算實際的梯度,例如,標量值wrt的偏導數。每個條目的特定張量或wrt。一個特定的標量。爲什麼有一個單獨的功能,如果tf.gradients也實現該功能?tf.gradients和tf.train.Optimizer.compute_gradient有什麼區別?

回答

2

tf.gradients不允許您計算雅可比矩陣,它會彙總每個輸出的梯度(類似於實際雅可比矩陣的每列的總和)。事實上,在TensorFlow中沒有「好」的計算Jacobians的方法(基本上你必須每個輸出調用tf.gradients一次,see this issue)。

關於tf.train.Optimizer.compute_gradients,是的,其結果基本相同,但是自動處理一些細節並以稍微方便的輸出格式。如果你看看the implementation,你會發現它的核心是對tf.gradients(在這種情況下是別名gradients.gradients)的調用,但是對於優化器實現來說已經實現了周圍的邏輯非常有用。另外,將它作爲一種方法允許子類中的可擴展行爲,以實現某種優化策略(不太可能在步驟compute_gradients步驟中)或輔助目的(如跟蹤或調試)。