Spec-Zone.ru › PyTorch 2

torch.autograd.functional.jacobian

torch.autograd.functional.jacobian(func, inputs, create_graph=False, strict=False, vectorize=False, strategy='reverse-mode') [source]

Функция, вычисляющая якобиан заданной функции.

Параметры
  • func (function) – функция Python, принимающая тензорные входные данные и возвращающая кортеж тензоров или тензор.
  • inputs (tuple of Tensors or Tensor) – входные данные функции func.
  • create_graph (bool, optional) – Если True, якобиан будет вычислен дифференцируемым способом. Обратите внимание, что когда strict равно False, результат не может потребовать градиенты или быть отключен от входных данных. По умолчанию False.
  • strict (bool, optional) – Если True, при обнаружении входных данных, для которых все выходные данные независимы от них, будет возбуждено исключение. Если False, мы возвращаем тензор нулей как якобиан для таких входных данных, что соответствует ожидаемому математическому значению. По умолчанию False.
  • vectorize (bool, optional) – Эта функция находится в стадии разработки. Пожалуйста, рассмотрите использование torch.func.jacrev() или torch.func.jacfwd() вместо этого, если вам нужно нечто менее экспериментальное и более эффективное. При вычислении якобиана обычно вызывается autograd.grad один раз для каждой строки якобиана. Если этот флаг True, мы выполним только один autograd.grad вызов с batched_grad=True, который использует прототип функции vmap. Хотя это должно привести к улучшению производительности во многих случаях, поскольку эта функция все еще находится в стадии разработки, могут быть скачки производительности. См. параметр torch.autograd.grad() для получения дополнительной информации.
  • strategy (str, optional) – Установите в "forward-mode" или "reverse-mode", чтобы определить, будет ли якобиан вычисляться с использованием прямой или обратной формы автоматического дифференцирования. В настоящее время "forward-mode" требует vectorized=True. По умолчанию "reverse-mode". Если у func больше выходных данных, чем входных, "forward-mode" обычно более эффективен. В противном случае предпочтительнее использовать "reverse-mode".
Возвращает

если есть один вход и один выход, это будет один тензор, содержащий якобиан для линеаризованных входных и выходных данных. Если один из двух является кортежем, то якобиан будет кортежем тензоров. Если оба являются кортежами, то якобиан будет кортежем кортежей тензоров, где Jacobian[i][j] будет содержать якобиан i-го выхода и j-го входа и будет иметь размер, равный объединению размеров соответствующего выхода и соответствующего входа, и будет иметь тот же тип и устройство, что и соответствующий вход. Если стратегия forward-mode, тип будет таким же, как у выхода; в противном случае, как у входа.

Тип возвращаемого значения

Якобиан (Tensor или вложенный кортеж тензоров)

Пример

>>> def exp_reducer(x):
...     return x.exp().sum(dim=1)
>>> inputs = torch.rand(2, 2)
>>> jacobian(exp_reducer, inputs)
tensor([[[1.4917, 2.4352],
         [0.0000, 0.0000]],
        [[0.0000, 0.0000],
         [2.4369, 2.3799]]])
>>> jacobian(exp_reducer, inputs, create_graph=True)
tensor([[[1.4917, 2.4352],
         [0.0000, 0.0000]],
        [[0.0000, 0.0000],
         [2.4369, 2.3799]]], grad_fn=<ViewBackward>)
>>> def exp_adder(x, y):
...     return 2 * x.exp() + 3 * y
>>> inputs = (torch.rand(2), torch.rand(2))
>>> jacobian(exp_adder, inputs)
(tensor([[2.8052, 0.0000],
        [0.0000, 3.3963]]),
 tensor([[3., 0.],
         [0., 3.]]))

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.autograd.functional.jacobian.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API