Spec-Zone.ru › PyTorch 2

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

Spec-Zone.ru

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