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()’sbatched_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