torch.autograd.functional.vhp
-
torch.autograd.functional.vhp(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, мы возвращаем тензор нулей как vhp для указанных входных данных, что является ожидаемым математическим значением. По умолчаниюFalse.
- Возвращает
-
- кортеж с:
-
func_output (кортеж тензоров или тензор): результат функции
func(inputs)vhp (кортеж тензоров или тензор): результат скалярного произведения с тем же размером, что и входные данные.
- Тип возвращаемого значения
-
выход (кортеж)
Пример
>>> def pow_reducer(x): ... return x.pow(3).sum() >>> inputs = torch.rand(2, 2) >>> v = torch.ones(2, 2) >>> vhp(pow_reducer, inputs, v) (tensor(0.5591), tensor([[1.0689, 1.2431], [3.0989, 4.4456]])) >>> vhp(pow_reducer, inputs, v, create_graph=True) (tensor(0.5591, grad_fn=<SumBackward0>), tensor([[1.0689, 1.2431], [3.0989, 4.4456]], grad_fn=<MulBackward0>)) >>> def pow_adder_reducer(x, y): ... return (2 * x.pow(2) + 3 * y.pow(2)).sum() >>> inputs = (torch.rand(2), torch.rand(2)) >>> v = (torch.zeros(2), torch.ones(2)) >>> vhp(pow_adder_reducer, inputs, v) (tensor(4.8053), (tensor([0., 0.]), tensor([6., 6.])))
© 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.vhp.html