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 (кортеж тензоров или тензор): результат скалярного произведения с той же формой, что и входные данные.
- Тип возвращаемого значения:
-
output (кортеж)
Пример
>>> 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/1.13/generated/torch.autograd.functional.vhp.html