torch.autograd.functional.hessian
-
torch.autograd.functional.hessian(func, inputs, create_graph=False, strict=False, vectorize=False, outer_jacobian_strategy='reverse-mode')[source] -
Функция, которая вычисляет гессиан заданной скалярной функции.
- Параметры:
-
- func (функция) – Python-функция, которая принимает тензорные входные данные и возвращает тензор с одним элементом.
-
inputs (кортеж тензоров или Tensor) – входные данные функции
func. -
create_graph (bool, необязательно) – Если
True, гессиан будет вычисляться дифференцируемым способом. Обратите внимание, что когдаstrictявляетсяFalse, результат не может требовать градиентов или быть отключенным от входных данных. По умолчаниюFalse. -
strict (bool, необязательно) – Если
True, будет генерироваться ошибка, когда будет обнаружено, что существует вход, для которого все выходные данные независимы от него. ЕслиFalse, мы возвращаем тензор нулей в качестве гессиана для указанных входных данных, что является ожидаемым математическим значением. По умолчаниюFalse. -
vectorize (bool, необязательно) – Эта функция экспериментальная. Рассмотрите использование functorch вместо нее, если вы ищете что-то менее экспериментальное и более производительное. При вычислении гессиана, обычно мы вызываем
autograd.gradодин раз на строку гессиана. Если этот флагTrue, мы используем прототип функции vmap в качестве бэкэнда для векторизации вызововautograd.grad, поэтому мы вызываем его только один раз вместо одного раза на строку. Это должно привести к улучшению производительности во многих случаях использования, однако, из-за того, что эта функция неполная, могут быть скачки производительности. Пожалуйста, используйтеtorch._C._debug_only_display_vmap_fallback_warnings(True)для отображения любых предупреждений о производительности и сообщите нам о проблемах, если предупреждения существуют для вашего случая использования. По умолчаниюFalse. -
outer_jacobian_strategy (str, необязательно) – Гессиан вычисляется путем вычисления якобиана якобиана. Внутренний якобиан всегда вычисляется в режиме обратного AD. Установка стратегии на
"forward-mode"или"reverse-mode"определяет, будет ли внешний якобиан вычисляться с помощью прямого или обратного режима AD. В настоящее время вычисление внешнего якобиана в"forward-mode"требуетvectorized=True. По умолчанию"reverse-mode".
- Возвращает:
-
Если существует один вход, это будет один тензор, содержащий гессиан для входных данных. Если это кортеж, то гессиан будет кортежем кортежей, где
Hessian[i][j]будет содержать гессианi-го входа иj-го входа с размером суммы размераi-го входа и размераj-го входа.Hessian[i][j]будет иметь тот же тип и устройство, что и соответствующийi-й вход. - Тип возвращаемого значения:
-
Гессиан (Tensor или кортеж кортежей тензоров)
Пример
>>> def pow_reducer(x): ... return x.pow(3).sum() >>> inputs = torch.rand(2, 2) >>> hessian(pow_reducer, inputs) tensor([[[[5.2265, 0.0000], [0.0000, 0.0000]], [[0.0000, 4.8221], [0.0000, 0.0000]]], [[[0.0000, 0.0000], [1.9456, 0.0000]], [[0.0000, 0.0000], [0.0000, 3.2550]]]])>>> hessian(pow_reducer, inputs, create_graph=True) tensor([[[[5.2265, 0.0000], [0.0000, 0.0000]], [[0.0000, 4.8221], [0.0000, 0.0000]]], [[[0.0000, 0.0000], [1.9456, 0.0000]], [[0.0000, 0.0000], [0.0000, 3.2550]]]], grad_fn=<ViewBackward>)>>> def pow_adder_reducer(x, y): ... return (2 * x.pow(2) + 3 * y.pow(2)).sum() >>> inputs = (torch.rand(2), torch.rand(2)) >>> hessian(pow_adder_reducer, inputs) ((tensor([[4., 0.], [0., 4.]]), tensor([[0., 0.], [0., 0.]])), (tensor([[0., 0.], [0., 0.]]), tensor([[6., 0.], [0., 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.hessian.html