torch.autograd.functional.hessian
-
torch.autograd.functional.hessian(func, inputs, create_graph=False, strict=False, vectorize=False, outer_jacobian_strategy='reverse-mode')[source] -
Вычисляет матрицу Гессе заданной скалярной функции.
- Параметры:
-
- func (function) – функция Python, принимающая на вход тензоры и возвращающая тензор с одним элементом.
-
inputs (tuple of Tensors or Tensor) – входные данные функции
func. -
create_graph (bool, optional) – Если
True, матрица Гессе будет вычислена дифференцируемым способом. Обратите внимание: еслиstrictравноFalse, результат может не требовать вычисления градиентов или быть не связанным с входными данными. По умолчанию —False. -
strict (bool, optional) – Если
True, будет вызвана ошибка, если мы обнаружим входные данные, от которых не зависят все выходные данные. ЕслиFalse, для таких входных данных в качестве матрицы Гессе возвращается тензор из нулей — ожидаемое математическое значение. По умолчанию —False. -
vectorize (bool, optional) – Эта возможность является экспериментальной. Если вам нужен менее экспериментальный и более производительный вариант, рассмотрите возможность использования
torch.func.hessian(). При вычислении матрицы Гессе обычно мы вызываемautograd.gradодин раз для каждой строки матрицы. Если этот флаг установлен вTrue, для векторизации вызововautograd.gradв качестве бэкенда используется прототипная функция vmap, поэтому вызов выполняется только один раз, а не по одному разу для каждой строки. Во многих случаях это должно повысить производительность, однако из-за незавершённости этой функции возможны резкие падения производительности. Используйтеtorch._C._debug_only_display_vmap_fallback_warnings(True)для отображения предупреждений о производительности и сообщайте нам о проблемах, если такие предупреждения возникают в вашем случае. По умолчанию —False. -
outer_jacobian_strategy (str, optional) – Матрица Гессе вычисляется путём вычисления якобиана якобиана. Внутренний якобиан всегда вычисляется в обратном режиме автоматического дифференцирования. Выбор стратегии
"forward-mode"или"reverse-mode"определяет, будет ли внешний якобиан вычисляться в прямом или обратном режиме автоматического дифференцирования. В настоящее время вычисление внешнего якобиана в режиме"forward-mode"требуетvectorized=True. По умолчанию —"reverse-mode".
- Возвращает:
-
Если входные данные представлены одним элементом, возвращается один тензор, содержащий матрицу Гессе для этих входных данных. Если это кортеж, матрица Гессе будет представлена кортежем кортежей, где
Hessian[i][j]будет содержать матрицу Гессе дляi-го иj-го входных данных, размер которой равен сумме размеровi-го иj-го входных данных.Hessian[i][j]будет иметь тот же тип данных и устройство, что и соответствующийi-й входной тензор. - Тип возвращаемого значения:
Пример
>>> 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.]])))
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.autograd.functional.hessian.html