使用python求海森Hessian矩阵

  考虑一个函数$y=f(\textbf{x}) (R^n\rightarrow R)$,y的Hessian矩阵定义如下:

  考虑一个函数:$$f(x)=b^Tx+\frac{1}{2}x^{T}Ax\\其中b^T=[1,3,5], A在代码中可读$$

  求该函数在x = [0,0,0]处海森矩阵值的python代码如下:

import torch

# 定义函数
x = torch.tensor([0., 0, 0], requires_grad=True)
b = torch.tensor([1., 3, 5])
A = torch.tensor([[-5, -3, -0.5], [-3, -2, 0], [-0.5, 0, -0.5]])
y = [email protected] + 0.5*[email protected]@x

# 计算一阶导数,因为我们需要继续计算二阶导数,所以创建并保留计算图
grad = torch.autograd.grad(y, x, retain_graph=True, create_graph=True)
# 定义Print数组,为输出和进一步利用Hessian矩阵作准备
Print = torch.tensor([])
for anygrad in grad[0]:  # torch.autograd.grad返回的是元组
    Print = torch.cat((Print, torch.autograd.grad(anygrad, x, retain_graph=True)[0]))
print(Print.view(x.size()[0], -1))

  输出结果如下:

原文地址:https://www.cnblogs.com/chester-cs/p/11755279.html

时间: 2024-11-29 01:01:37

使用python求海森Hessian矩阵的相关文章

海森(Hessian)矩阵

在图的鞍点位置,?标函数在x轴?向上是局部最小值,但在y轴?向上是局部最?值. 假设?个函数的输?为k维向量,输出为标量,那么它的海森矩阵(Hessian matrix)有k个特征值(参?附录中“数学基础”?节).该函数在梯度为0的位置上可能是局部最小值.局部最?值或者鞍点. •当函数的海森矩阵在梯度为零的位置上的特征值全为正时,该函数得到局部最小值.• 当函数的海森矩阵在梯度为零的位置上的特征值全为负时,该函数得到局部最?值.•当函数的海森矩阵在梯度为零的位置上的特征值有正有负时,该函数得到鞍

目标检测之基础hessian matrix ---海森矩阵

就是海赛(海色)矩阵,在网上搜就有. 在数学中,海色矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, Hessian矩阵是多维变量函数的二阶偏导数矩阵,H(i,j)=d^2(f)/(d(xi)d(xj)) 它是对称的.如果是正定的的可用导数=0的变量组确定它的极小值,负定的确定它的极大值,否则无法确定极值. 1.极值(极大值或极小值)的定义 设有定义在区域D Rn上的函数 y=f(x)=f(x1,...,xn) . 对于区域D的一内点x0=(x10,...,xn0),若存在x0的一个

Hessian矩阵【转】

在数学中,海塞矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,一元函数就是二阶导,多元函数就是二阶偏导组成的矩阵.求向量函数最小值时可以使用,矩阵正定是最小值存在的充分条件.经济学中常常遇到求最优的问题,目标函数是多元非线性函数的极值问题,尚无一般的求解方法,但判定局部极小值的方法就是用hessian矩阵: 在x0点上,hessian矩阵是负定的,且各分量的一阶偏导数为0,则x0为极大值点. 在x0点上,hessian矩阵式正定的,且各分量的一阶偏导数为0,则x0为极小值点. 矩阵是

梯度、Hessian矩阵、平面方程的法线以及函数导数的含义

本文转载自: Xianling Mao的专栏 =========================================================================== 想必单独论及“ 梯度.Hessian矩阵.平面方程的法线以及函数导数”等四个基本概念的时候,绝大部分人都能够很容易地谈个一二三,基本没有问题. 其实在应用的时候,这几个概念经常被混淆,本文试图把这几个概念之间的关系整理一下,以便应用之时得心应手. 这四个概念中,Hessian矩阵是最不容易混淆,但却是

Jacobian矩阵和Hessian矩阵

1.Jacobian矩阵 在矩阵论中,Jacobian矩阵是一阶偏导矩阵,其行列式称为Jacobian行列式.假设 函数 $f:R^n \to R^m$, 输入是向量 $x \in R^n$ ,输出为向量 $f(x) \in R^m$ ,那么对应的Jacobian矩阵 $J$ 是一个 $m*n$ 的矩阵,其定义如下: \[\mathbf J = \frac{d\mathbf f}{d\mathbf x} = \begin{bmatrix}\dfrac{\partial \mathbf{f}}{\

python求微分方程组的数值解曲线01

本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, i+1\}}c_{ij}f(x_j(t-\tau_{ij})), t\in\mathbb{R} (1.1) y_i^{\Delta}(t)= -a_i*y_i(t)+ b_i* f(y_i(t))+ \sum\limits_{j \in\{i-1, i+1\}}c_{ij}f(y_j(t-\tau_

python求crc32值的方法

python求crc32值的方法 在python代码中求CRC值,要import binasciibinascii.crc32(v) 求出了v的crc32值,这是一个long型,形如-1456387L,把这个值&0xffffffff得到的值形如48a213L的形式.然后,把这个值用16进制表示出来.www.jbxue.com例子: def _crc32(self, v): """ Generates the crc32 hash of the v. @return:

python 求10亿以内和987654互质正整数的和

加群看见的 但是计算好慢,谁有更优的算法,麻烦说一下. ? 1 2 3 4 5 6 7 8 9 10 factor=[] for x in xrange(1, 987654//2+1):     if 987654%x==0:         factor.append(x) sum=0 for y in xrange(1, 1000000000):     for z in factor:         if y%z == 0:             sum+=y print sum 51

ACM大一练习赛-第三场——A - 海森堡不确定原理

A - 海森堡不确定原理 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 给一个N位的正整数,该数不包含前导0,先让你调整其中每个数字的位置,得到另一个n位的数,并且使得这个数越小越好,而且这个数不能包含前导0.比如543210可以变成102345,而12345保持不变才是最优结果. Input 第一行一个整数T(T<=100),表示有