Spec-Zone.ru › PyTorch 2

torch.autograd.functional.vjp

torch.autograd.functional.vjp(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, мы возвращаем тензор нулей как vjp для указанных входных данных, что является ожидаемым математическим значением. По умолчанию False.
Возвращает
кортеж с:

func_output (кортеж тензоров или тензор): результат вычисления func(inputs)

vjp (кортеж тензоров или тензор): результат скалярного произведения с тем же размером, что и входные данные.

Тип возвращаемого значения

выход (кортеж)

Пример

>>> def exp_reducer(x):
...     return x.exp().sum(dim=1)
>>> inputs = torch.rand(4, 4)
>>> v = torch.ones(4)
>>> vjp(exp_reducer, inputs, v)
(tensor([5.7817, 7.2458, 5.7830, 6.7782]),
 tensor([[1.4458, 1.3962, 1.3042, 1.6354],
        [2.1288, 1.0652, 1.5483, 2.5035],
        [2.2046, 1.1292, 1.1432, 1.3059],
        [1.3225, 1.6652, 1.7753, 2.0152]]))
>>> vjp(exp_reducer, inputs, v, create_graph=True)
(tensor([5.7817, 7.2458, 5.7830, 6.7782], grad_fn=<SumBackward1>),
 tensor([[1.4458, 1.3962, 1.3042, 1.6354],
        [2.1288, 1.0652, 1.5483, 2.5035],
        [2.2046, 1.1292, 1.1432, 1.3059],
        [1.3225, 1.6652, 1.7753, 2.0152]], grad_fn=<MulBackward0>))
>>> def adder(x, y):
...     return 2 * x + 3 * y
>>> inputs = (torch.rand(2), torch.rand(2))
>>> v = torch.ones(2)
>>> vjp(adder, inputs, v)
(tensor([2.4225, 2.3340]),
 (tensor([2., 2.]), tensor([3., 3.])))

© 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.vjp.html

Spec-Zone.ru

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