Spec-Zone.ru › PyTorch 2

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

Spec-Zone.ru

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