📜  Python – tensorflow.GradientTape.batch_jacobian()(1)

📅  最后修改于: 2023-12-03 14:46:07.568000             🧑  作者: Mango

Python – tensorflow.GradientTape.batch_jacobian()

在 TensorFlow 中,GradientTape 库提供了一种在自动微分的过程中计算的梯度计算器。这个库中的 batch_jacobian() 函数用于计算函数的雅可比矩阵。雅可比矩阵是一个包含所有输入变量的偏导数的矩阵,它是用于计算变量对函数的梯度的。

语法
tf.GradientTape.batch_jacobian(target, sources, unconnected_gradients=tf.UnconnectedGradients.NONE)

参数:

  • target: 目标张量(张量),得到 target 变量的雅可比矩阵,即将使用 sources 变量进行微分,目标变量将得到微分。
  • sources: 表示输入张量的张量表示列表或张量表示元组(其中每个张量表示均为浮点数 dtype)或单个张量。在这里,我们将使用 sources 变量中的每个元素对 target 进行微分。
  • unconnected_gradients: 表示捕获 unconnected_gradients 的策略。如果指定为 'NONE',则表示不捕获 unconnected_gradients。默认值是 'NONE'。
示例

下面是一个简单的示例,展示了如何使用 GradientTape 执行批次雅可比矩阵计算。假设有一个函数 f(x,y,z) = x^2 + y*z,要计算输出( f([1.0, 2.0], 3.0, [4.0, 5.0]),[3.0, 7.0])的雅可比矩阵:

import tensorflow as tf

# 设置输入变量
x = tf.constant([1.0, 2.0])
y = tf.constant(3.0)
z = tf.constant([4.0, 5.0])

# 定义函数
def f(x, y, z):
    return x ** 2 + y * z

# 创建 GradientTape 对象
with tf.GradientTape() as tape:
    # 在 GradientTape 中指定输入变量
    tape.watch([x, y, z])
    # 计算函数输出
    output = f(x, y, z)

# 计算批次雅可比矩阵
jacobian = tape.batch_jacobian(output, [x, y, z])

# 输出批次雅可比矩阵
print(jacobian)

输出:

tf.Tensor(
[[2.         4.        ]
 [0.         5.        ]], shape=(2, 2), dtype=float32)

这个结果表示,变量 x 和 y 对输出值的梯度为 [2.0, 0.0] 和 [4.0, 5.0]。因为 z 是一个张量,有两个元素,所以在这里我们得到了一个 2×2 的输出矩阵