torch.autograd.functional.jvp
-
torch.autograd.functional.jvp(func, inputs, v=None, create_graph=False, strict=False)[source] -
Функция, которая вычисляет скалярное произведение между якобианом заданной функции в точке, заданной входными данными, и вектором
v.- Параметры:
-
- func (функция) – функция Python, которая принимает тензорные входные данные и возвращает кортеж тензоров или тензор.
-
inputs (кортеж тензоров или Tensor) – входные данные для функции
func. -
v (кортеж тензоров или Tensor) – Вектор, для которого вычисляется произведение якобиана и вектора. Размер должен совпадать с размером входных данных функции
func. Этот аргумент является необязательным, когда вход для функцииfuncсодержит один элемент, и (если он не предоставлен) будет установлен как тензор, содержащий один1. -
create_graph (bool, необязательный) – Если
True, как результат вычисления, и выходные данные будут вычисляться дифференцируемым способом. Обратите внимание, что когдаstrictимеет значениеFalse, результат не может требовать градиентов или быть отключён от входных данных. По умолчаниюFalse. -
strict (bool, необязательный) – Если
True, будет выброшено исключение, когда мы обнаружим, что существует входной элемент, для которого все выходные данные независимы от него. ЕслиFalse, мы возвращаем тензор нулей как jvp для указанных входных данных, что является ожидаемым математическим значением. По умолчаниюFalse.
- Возвращает:
-
- кортеж с:
-
func_output (кортеж тензоров или тензор): результат функции
func(inputs)jvp (кортеж тензоров или тензор): результат скалярного произведения с той же формой, что и выходные данные.
- Тип возвращаемого значения:
-
выход (кортеж)
Примечание
autograd.functional.jvpвычисляет jvp, используя обратное обратное вычисление (иногда называемое трюком двойного обратного прохода). Это не самый эффективный способ вычисления jvp. Рассмотрите использование functorch’s 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/1.13/generated/torch.autograd.functional.jvp.html