scipy.optimize.minimze
将obj
和jac
函数作为输入。 我相信它会在需要时单独调用它们。但通常情况下,我们会遇到目标函数,其梯度计算共享来自目标函数的大量计算。所以理想情况下,我想同时计算obj
和grad
。但这个图书馆似乎不是这样吗?如果一个人仍然想使用scipy.optimize.minimze
如果有的话,有什么方法可以处理它?
你完全可以。只需使用jac=True
:
In [1]: import numpy as np
In [2]: from scipy.optimize import minimize
In [3]: def f_and_grad(x):
...: return x**2, 2*x
...:
In [4]: minimize(f_and_grad, [1], jac=True)
Out[4]:
fun: 1.8367099231598242e-40
hess_inv: array([[ 0.5]])
jac: array([ 2.71050543e-20])
message: 'Optimization terminated successfully.'
nfev: 4
nit: 2
njev: 4
status: 0
success: True
x: array([ 1.35525272e-20])
它实际上被记录在案:
jac:布尔值或可调用,目标的可选雅可比(梯度) 功能。仅适用于CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,狗腿, 信任-NCG。如果 jac 是布尔值并且为 True,则假定乐趣返回 梯度以及目标函数。如果为假,则梯度 将以数字方式估计。JAC 也可以是可调用的回报 目标的梯度。在这种情况下,它必须接受相同的 争论很有趣。
(强调我的)