torch.autograd.functional.jvp
-
torch.autograd.functional.jvp(func, inputs, v=None, create_graph=False, strict=False)[source] -
Функция, которая вычисляет скалярное произведение между якобианом заданной функции в точке, заданной входными данными, и вектором
v.- Parameters
-
- func (function) – функция Python, которая принимает тензорные входные данные и возвращает кортеж тензоров или тензор.
-
inputs (tuple of Tensors or Tensor) – входные данные функции
func. -
v (tuple of Tensors or Tensor) – Вектор, для которого вычисляется произведение якобиана и вектора. Размер должен быть таким же, как размер входных данных
func. Этот аргумент необязателен, когда входfuncсодержит один элемент, и (если он не предоставлен) будет установлен как тензор, содержащий один1. -
create_graph (bool, optional) – Если
True, то и выход, и результат будут вычислены дифференцируемым способом. Обратите внимание, что когдаstrictравноFalse, результат не может потребовать градиенты или быть отключен от входных данных. По умолчаниюFalse. -
strict (bool, optional) – Если
True, будет возбуждено исключение, когда мы обнаружим, что существует вход, для которого все выходы независимы от него. ЕслиFalse, мы возвращаем тензор нулей в качестве jvp для указанных входных данных, что является ожидаемым математическим значением. По умолчаниюFalse.
- Returns
-
- tuple с:
-
func_output (кортеж тензоров или тензор): результат вычисления
func(inputs)jvp (кортеж тензоров или тензор): результат скалярного произведения с такой же формой, как и выход.
- Return type
-
output (tuple)
Примечание
autograd.functional.jvpвычисляет jvp, используя обратный ход обратного (иногда называемый трюком двойного обратного хода). Это не самый эффективный способ вычисления jvp. Пожалуйста, рассмотрите использованиеtorch.func.jvp()или API для низкоуровневого режима AD вместо этого.Пример
>>> def exp_reducer(x): ... return x.exp().sum(dim=1) >>> inputs = torch.rand(4, 4) >>> v = torch.ones(4, 4) >>> jvp(exp_reducer, inputs, v) (tensor([6.3090, 4.6742, 7.9114, 8.2106]), tensor([6.3090, 4.6742, 7.9114, 8.2106]))
>>> jvp(exp_reducer, inputs, v, create_graph=True) (tensor([6.3090, 4.6742, 7.9114, 8.2106], grad_fn=<SumBackward1>), tensor([6.3090, 4.6742, 7.9114, 8.2106], grad_fn=<SqueezeBackward1>))
>>> def adder(x, y): ... return 2 * x + 3 * y >>> inputs = (torch.rand(2), torch.rand(2)) >>> v = (torch.ones(2), torch.ones(2)) >>> jvp(adder, inputs, v) (tensor([2.2399, 2.5005]), tensor([5., 5.]))
© 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.jvp.html