torch.autograd.functional.jacobian
-
torch.autograd.functional.jacobian(func, inputs, create_graph=False, strict=False, vectorize=False, strategy='reverse-mode')[исходный код] -
Вычисляет якобиан заданной функции.
- Параметры:
-
- 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. Хотя во многих случаях это должно повысить производительность, поскольку функция всё ещё является экспериментальной, возможны резкие падения производительности. Подробнее см. параметрbatched_gradфункцииtorch.autograd.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.]]))>>> def linear_model(x): ... W = torch.tensor([[2.0, -1.0], [0.0, 1.0]]) ... b = torch.tensor([1.0, 0.5]) ... return x @ W.T + b
>>> x = torch.randn(4, 2, requires_grad=True) >>> jac = jacobian(linear_model, x, vectorize=True) >>> jac.shape torch.Size([4, 2, 4, 2])
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.autograd.functional.jacobian.html