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