Метод jacobian
Метод jacobian класса GradientTape вычисляет матрицу Якоби
для функции или тензора относительно отслеживаемых переменных.
Метод применяется к целевому тензору и возвращает тензор, содержащий
частные производные. Первым параметром передаётся целевой тензор,
вторым - список или структура отслеживаемых тензоров, третьим - параметр
unconnected_gradients, определяющий поведение при отсутствии связи.
Синтаксис
GradientTape.jacobian(target, sources, unconnected_gradients=tf.UnconnectedGradients.NONE)
Пример
Давайте вычислим матрицу Якоби для простой функции относительно одной переменной:
import tensorflow as tf
x = tf.constant([1.0, 2.0, 3.0])
with tf.GradientTape() as tape:
tape.watch(x)
y = x * x
jac = tape.jacobian(y, x)
print(jac)
Результат выполнения кода:
tf.Tensor(
[[2. 0. 0.]
[0. 4. 0.]
[0. 0. 6.]], shape=(3, 3), dtype=float32)
Пример
Давайте вычислим матрицу Якоби для функции двух переменных:
import tensorflow as tf
x = tf.constant([1.0, 2.0])
y = tf.constant([3.0, 4.0])
with tf.GradientTape() as tape:
tape.watch([x, y])
z = x * y + x
jac = tape.jacobian(z, [x, y])
print(jac[0])
print(jac[1])
Результат выполнения кода:
tf.Tensor(
[[4. 0.]
[0. 3.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[1. 0.]
[0. 2.]], shape=(2, 2), dtype=float32)
Пример
Давайте вычислим матрицу Якоби для нелинейной функции с несколькими выходами:
import tensorflow as tf
x = tf.constant([1.0, 2.0, 3.0])
with tf.GradientTape() as tape:
tape.watch(x)
y = tf.stack([x * x, tf.math.sin(x)])
jac = tape.jacobian(y, x)
print(jac)
Результат выполнения кода:
tf.Tensor(
[[[2. 0. 0.]
[0. 4. 0.]
[0. 0. 6.]]
[[0.5403023 0. 0.]
[0. 0.41614684 0.]
[0. 0. 0.9899925]]], shape=(2, 3, 3), dtype=float32)
Смотрите также
-
класс
GradientTape,
который записывает операции для автоматического дифференцирования -
метод
gradient,
который вычисляет градиент функции -
метод
batch_jacobian,
который вычисляет матрицу Якоби для батча -
метод
watch,
который начинает отслеживание тензора