Spec-Zone.ru › PyTorch 1

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 (кортеж тензоров или Tensor) – входные данные для функции func.
  • create_graph (bool, optional) – Если True, якобиан будет вычислен с возможностью дифференцирования. Обратите внимание, что когда strict равно False, результат не может требовать градиенты или быть отключен от входных данных. По умолчанию False.
  • strict (bool, optional) – Если True, будет выброшено исключение, когда мы обнаружим, что существует вход, такой что все выходы независимы от него. Если False, мы возвращаем тензор нулей как якобиан для указанных входов, что является ожидаемым математическим значением. По умолчанию False.
  • vectorize (bool, optional) – Эта функция экспериментальная. Пожалуйста, рассмотрите использование functorch’s jacrev или jacfwd вместо этого, если вы ищете что-то менее экспериментальное и более производительное. При вычислении якобиана, обычно мы вызываем autograd.grad один раз на строку якобиана. Если этот флаг True, мы выполняем только один autograd.grad вызов с batched_grad=True, который использует прототип функции vmap. Хотя это должно привести к улучшению производительности во многих случаях, поскольку эта функция всё ещё экспериментальна, могут возникнуть проблемы с производительностью. См. параметр torch.autograd.grad()’s batched_grad для получения дополнительной информации.
  • strategy (str, optional) – Установите значение "forward-mode" или "reverse-mode" для определения того, будет ли якобиан вычисляться с использованием прямого или обратного режима AD. В настоящее время "forward-mode" требует vectorized=True. По умолчанию "reverse-mode". Если func имеет больше выходов, чем входов, "forward-mode" обычно более производителен. В противном случае предпочтительнее использовать "reverse-mode".
Возвращаемое значение:

Если есть один вход и один выход, это будет один тензор, содержащий якобиан для линеаризованных входов и выходов. Если один из них кортеж, то якобиан будет кортежем тензоров. Если оба кортежи, то якобиан будет кортежем кортежей тензоров, где Jacobian[i][j] будет содержать якобиан i-го выхода и j-го входа и будет иметь размер, равный конкатенации размеров соответствующего выхода и соответствующего входа, и будет иметь тот же тип данных и устройство, что и соответствующий вход. Если strategy — 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/1.13/generated/torch.autograd.functional.jacobian.html

Spec-Zone.ru

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