用法
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。