Spec-Zone.ru › PyTorch 1

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API