用法
batch_jacobian(
target, source, unconnected_gradients=tf.UnconnectedGradients.NONE,
parallel_iterations=None, experimental_use_pfor=True
)
參數
-
target
秩為 2 或更高且形狀為 [b, y1, ..., y_n] 的張量。target[i,...]
應該隻依賴於source[i,...]
。 -
source
秩為 2 或更高且形狀為 [b, x1, ..., x_m] 的張量。 -
unconnected_gradients
一個可以保存 'none' 或 'zero' 的值,並更改目標和源未連接時將返回的值。可能的值和影響在'UnconnectedGradients' 中有詳細說明,默認為'none'。 -
parallel_iterations
一個旋鈕,用於控製並行調度多少次迭代。此旋鈕可用於控製總內存使用量。 -
experimental_use_pfor
如果為真,則使用 pfor 計算雅可比。否則使用 tf.while_loop。
返回
-
形狀為 [b, y_1, ..., y_n, x1, ..., x_m] 的張量
t
其中t[i, ...]
是target[i, ...]
w.r.t 的雅可比。source[i, ...]
,即堆疊的 per-example jacobians。
拋出
-
RuntimeError
如果在使用過的非永久性磁帶上調用。 -
RuntimeError
如果在啟用了即刻執行但未啟用 experimental_use_pfor 的情況下在非持久性磁帶上調用。 -
ValueError
如果 jacobian 計算的矢量化失敗或target
和source
的第一維不匹配。
計算和堆疊per-example jacobians。
有關雅可比行列式的定義,請參見維基百科文章。此函數本質上是以下內容的有效實現:
tf.stack([self.jacobian(y[i], x[i]) for i in range(x.shape[0])])
.
請注意,與 GradientTape.jacobian
計算每個輸入值的每個輸出值的梯度相比,此函數在 target[i,...]
獨立於 j != i
的 source[j,...]
時很有用。與 GradientTape.jacobian
相比,此假設允許更有效的計算。輸出以及中間激活是低維的,並且避免了一堆冗餘零,這將導致在獨立假設下的雅可比計算。
注意:除非您設置 persistent=True
,否則 GradientTape 隻能用於計算一組梯度(或雅可比)。
注意:默認情況下,batch_jacobian 實現使用並行 for (pfor),它在後台為每個 batch_jacobian 調用創建一個 tf.function。為了獲得更好的性能,並避免在每次調用時重新編譯和矢量化重寫,請將 GradientTape 代碼包含在 @tf.function 中。
示例用法:
with tf.GradientTape() as g:
x = tf.constant([[1., 2.], [3., 4.]], dtype=tf.float32)
g.watch(x)
y = x * x
batch_jacobian = g.batch_jacobian(y, x)
# batch_jacobian is [[[2, 0], [0, 4]], [[6, 0], [0, 8]]]
相關用法
- Python tf.GradientTape.jacobian用法及代碼示例
- Python tf.GradientTape.reset用法及代碼示例
- Python tf.GradientTape.stop_recording用法及代碼示例
- Python tf.GradientTape用法及代碼示例
- Python tf.Graph.control_dependencies用法及代碼示例
- Python tf.Graph.container用法及代碼示例
- Python tf.Graph.as_default用法及代碼示例
- Python tf.Graph.device用法及代碼示例
- Python tf.Graph用法及代碼示例
- Python tf.Graph.get_name_scope用法及代碼示例
- Python tf.Graph.gradient_override_map用法及代碼示例
- Python tf.Graph.name_scope用法及代碼示例
- Python tf.Graph.colocate_with用法及代碼示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代碼示例
- Python tf.compat.v1.distribute.MirroredStrategy.experimental_distribute_dataset用法及代碼示例
- Python tf.compat.v1.data.TFRecordDataset.interleave用法及代碼示例
- Python tf.summary.scalar用法及代碼示例
- Python tf.linalg.LinearOperatorFullMatrix.matvec用法及代碼示例
- Python tf.linalg.LinearOperatorToeplitz.solve用法及代碼示例
- Python tf.raw_ops.TPUReplicatedInput用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.GradientTape.batch_jacobian。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。