Spec-Zone.ru › PyTorch 2

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, мы используем прототип функции vmap в качестве бэкенда для векторизации вызовов к autograd.grad, чтобы вызвать его только один раз вместо одного раза на строку. Это должно привести к улучшению производительности во многих случаях, однако, из-за неполноты этой функции, могут быть скачки производительности. Используйте torch._C._debug_only_display_vmap_fallback_warnings(True) для отображения любых предупреждений о производительности и отправьте нам сообщения об ошибках, если предупреждения существуют для вашего случая использования. По умолчанию False.
  • outer_jacobian_strategy (str, optional) – Гессиан вычисляется путём вычисления якобиана якобиана. Внутренний якобиан всегда вычисляется в режиме обратного распространения 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/2.1/generated/torch.autograd.functional.hessian.html

Spec-Zone.ru

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