python – 当jac = False时,当jarobian没有被使用的近似值时,“雅可比是Newton-CG方法所必需的”?

python – 当jac = False时,当jarobian没有被使用的近似值时,“雅可比是Newton-CG方法所必需的”?,第1张

概述我正在使用scipy.optimize.minimize进行优化,并尝试使用以下方法:’Newton-CG’,’dogleg’和’trust-ncg’.据我所知,对于这些方法,需要一个目标函数的雅可比.但是, documentation建议如果将jac设置为False,则将以数字方式计算梯度. 所以我试图像这样调用函数: scipy.optimize.minimize(fun,x0,method= 我正在使用scipy.optimize.minimize进行优化,并尝试使用以下方法:’Newton-CG’,’dogleg’和’trust-ncg’.据我所知,对于这些方法,需要一个目标函数的雅可比.但是,documentation建议如果将jac设置为False,则将以数字方式计算梯度.

所以我试图像这样调用函数:

scipy.optimize.minimize(fun,x0,method='Newton-CG',jac=False,options={'disp':True}

当我调用它时,我收到以下错误消息:

file "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py",line 1351,in _minimize_newtoncgraise ValueError('Jacobian is required for Newton-CG method')

这是令人惊讶的,因为我认为我只是将其设置为False(如果jac设置为None,则此异常仅发生在* / optimize.py中).所以我进入/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py并查看函数

def _minimize_newtoncg(fun,args=(),jac=None,hess=None,hessp=None,callback=None,xtol=1e-5,eps=_epsilon,maxiter=None,disp=False,return_all=False,**unkNown_options):

在这个函数的开头我写了以下print语句:

print (jac)_check_unkNown_options(unkNown_options)print(jac)if jac is None:    raise ValueError('Jacobian is required for Newton-CG method')

令人惊讶的是,“无”是打印而不是假!所以我看看调用函数,它位于/usr/lib/python2.7/dist-packages/scipy/optimize/_minimize.py中,我找到了将其设置为None的代码片段:

if not callable(jac):    if bool(jac):        fun = MemoizeJac(fun)        jac = fun.derivative    else:        jac = None

因此,为什么将jac设置为None是有道理的(尽管它似乎与文档不兼容,表明我将通过在原始函数调用中将jac设置为False来获得jacobian的数值近似).

我错过了什么?我是否有可能像上面用Scipy计算雅各比的数值近似来调用’Newton-CG’方法?

解决方法 根据我对SciPy的经验……

SciPy文档引用的数值近似是您在引用的代码中看到的“MemoizeJac”类.当没有提供“jac”时,记忆会自动发生.在Newton-CG函数的文档中,可能是一个错误,它告诉您将Jacobian设置为“False”.

只需设置jac = None或不为jac提供参数,渐变的数值近似将用于Newton-CG函数.

总结

以上是内存溢出为你收集整理的python – 当jac = False时,当jarobian没有被使用的近似值时,“雅可比是Newton-CG方法所必需的”?全部内容,希望文章能够帮你解决python – 当jac = False时,当jarobian没有被使用的近似值时,“雅可比是Newton-CG方法所必需的”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1196024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存