gpt4 book ai didi

python - "Jacobian is required for Newton-CG method"当 jac=False 时不使用 Jacobian 的近似值?

转载 作者:太空狗 更新时间:2023-10-30 01:37:43 27 4
gpt4 key购买 nike

我正在使用 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_newtoncg
raise 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, x0, args=(), jac=None, hess=None, hessp=None,
callback=None, xtol=1e-5, eps=_epsilon, maxiter=None,
disp=False, return_all=False,
**unknown_options):

在此函数的开头,我编写了以下打印语句:

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

令人惊讶的是,打印的是“None”而不是 False!所以我查看了/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 来获得雅可比矩阵的数值近似值的文档不兼容)。

我错过了什么?我是否可以像上面使用 Scipy 为我计算雅可比行列式的数值近似那样调用“Newton-CG”方法?

最佳答案

显然这个错误仍然存​​在,三年后。

对于 Newton-CG,最小化器只采用可调用的 Jacobian。获得一个的快速方法是使用 scipy.optimize.approx_fprime,如下所示:

# x0 is your initial guess.
fprime = lambda x: optimize.approx_fprime(x, f, 0.01)
result = optimize.minimize(f, x0, method = 'Newton-CG', jac = fprime)

据我了解,这应该是“2 点”方法的实现方式。

关于python - "Jacobian is required for Newton-CG method"当 jac=False 时不使用 Jacobian 的近似值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com