當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.GradientTape.jacobian用法及代碼示例


用法

jacobian(
    target, sources, unconnected_gradients=tf.UnconnectedGradients.NONE,
    parallel_iterations=None, experimental_use_pfor=True
)

參數

  • target 待區分的張量。
  • sources 張量或變量的列表或嵌套結構。 target 將與 sources 中的元素區分開來。
  • unconnected_gradients 一個可以保存 'none' 或 'zero' 的值,並更改目標和源未連接時將返回的值。可能的值和影響在'UnconnectedGradients' 中有詳細說明,默認為'none'。
  • parallel_iterations 一個旋鈕,用於控製並行調度多少次迭代。此旋鈕可用於控製總內存使用量。
  • experimental_use_pfor 如果為真,則向量化雅可比計算。否則回退到順序 while_loop。矢量化有時會失敗或導致內存使用過多。在這種情況下,此選項可用於禁用矢量化。

返回

  • 張量(或無)的列表或嵌套結構,sources 中的每個元素一個。返回的結構與 sources 的結構相同。請注意,如果任何梯度是稀疏的(IndexedSlices),雅可比函數當前使其變得密集並返回一個張量。這在未來可能會改變。

拋出

  • RuntimeError 如果在使用過的非永久性磁帶上調用。
  • RuntimeError 如果在啟用了即刻執行但未啟用 experimental_use_pfor 的情況下在非持久性磁帶上調用。
  • ValueError 如果雅可比計算的矢量化失敗。

使用記錄在該磁帶上下文中的操作計算雅可比。

注意:除非您設置 persistent=True,否則 GradientTape 隻能用於計算一組梯度(或雅可比)。

注意:默認情況下,jacobian 實現使用並行 for (pfor),它在後台為每個 jacobian 調用創建一個 tf.function。為了獲得更好的性能,並避免在每次調用時重新編譯和矢量化重寫,請將 GradientTape 代碼包含在 @tf.function 中。

有關雅可比行列式的定義,請參見維基百科文章。

示例用法:

with tf.GradientTape() as g:
  x  = tf.constant([1.0, 2.0])
  g.watch(x)
  y = x * x
jacobian = g.jacobian(y, x)
# jacobian value is [[2., 0.], [0., 4.]]

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.GradientTape.jacobian。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。