如何在 PyTorch 中计算给定标量函数的海森矩阵?


hessian() 函数计算给定函数的海森矩阵。hessian() 函数可以从 torch.autograd.functional 模块访问。正在计算海森矩阵的函数以张量作为输入,并返回一个张量元组或一个张量。hessian() 函数返回一个张量,其中包含为具有给定输入的函数计算的海森矩阵值。

语法

torch.autograd.functional.hessian(func, input)

参数

  • func − 它是计算海森矩阵的 Python 函数。

  • input − 它是函数 func 的输入。

步骤

我们可以使用以下步骤来计算给定函数的海森矩阵:

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 torch。确保您已安装它。

import torch
from torch.autograd.functional import hessian
  • 定义一个函数 func,需要为其计算海森矩阵。此函数的输入为 input

def func(x):
   return x**3 + 4*x -10
  • 定义函数 func 的张量 input

input = torch.tensor([2.,3.,4.])
  • 计算上面为给定输入 input 定义的函数的海森矩阵。

output = hessian(func, input)
  • 打印包含计算出的海森矩阵的张量。

print("Hessian Tensor:
", output)

示例 1

# Import the required libraries
import torch
from torch.autograd.functional import hessian

# define a function
def func(x):
   return x**3 + 4*x -10
input = torch.tensor([2.])
output = hessian(func, input)
print("Hessian Tensor:
",output)

输出

Hessian Tensor:
   tensor([[12.]])

在上面的示例中,我们计算了给定输入的函数的海森矩阵。这里我们使用的函数是单变量函数。

示例 2

# Import the required libraries
import torch
from torch.autograd.functional import hessian
def func(x):
   return (x**3 + 4*x -10).sum()

# apply an input having more than one elements
input = torch.randn(2,2)
output = hessian(func, input)
print(output)

输出

tensor([[[[-1.4218, -0.0000],
   [ 0.0000, -0.0000]],

   [[-0.0000, -2.7878],
   [ 0.0000, -0.0000]]],

   [[[-0.0000, -0.0000],
   [ 1.9817, -0.0000]],

   [[-0.0000, -0.0000],
   [ 0.0000, -2.8517]]]])

在上面的示例中,我们计算了给定 2×2 输入张量的函数的海森矩阵。这里我们使用的函数是单变量函数。

示例 3

# Import the required libraries
import torch
from torch.autograd.functional import hessian

# define a function
def func(x, y):
   return x**3 + x*y
input = (torch.tensor([2.]),torch.tensor([4.]))
output = hessian(func, input)
print(output)

# to apply multi element tensor as input
def func(x, y):
   return (x**3 + x*y).sum()
input = (torch.tensor([2.,3.]),torch.tensor([4., 5.]))
output = hessian(func, input)
print(output)

输出

((tensor([[12.]]), tensor([[1.]])), (tensor([[1.]]),
   tensor([[0.]])))
((tensor([[12., 0.],
   [ 0., 18.]]), tensor([[1., 0.],
   [0., 1.]])), (tensor([[1., 0.],
   [0., 1.]]), tensor([[0., 0.],
   [0., 0.]])))

在上面的示例中,我们计算了给定输入张量的函数的海森矩阵。这里我们使用的函数是双变量函数。因此,我们已将输入定义为两个张量的元组。

更新于: 2022-01-27

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告