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