Python 当您想要计算梯度和目标函数时,如何使用scipy.optimize.minimize函数?
Python 当您想要计算梯度和目标函数时,如何使用scipy.optimize.minimize函数?,python,scipy,scikit-learn,Python,Scipy,Scikit Learn,scipy.optimize.minimize将obj和jac函数作为输入。我相信它会在需要时单独调用它们。但我们经常会遇到目标函数,它们的梯度计算与目标函数共享很多计算。因此理想情况下,我希望同时计算obj和grad。但这个图书馆似乎不是这样的?如果仍然想使用scipy.optimize.minimize(如果有的话),怎么处理呢?你完全可以。只需使用jac=True: In [1]: import numpy as np In [2]: from scipy.optimize import
scipy.optimize.minimize
将obj
和jac
函数作为输入。我相信它会在需要时单独调用它们。但我们经常会遇到目标函数,它们的梯度计算与目标函数共享很多计算。因此理想情况下,我希望同时计算obj
和grad
。但这个图书馆似乎不是这样的?如果仍然想使用scipy.optimize.minimize(如果有的话),怎么处理呢?你完全可以。只需使用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:bool或可调用的可选目标雅可比(梯度)
功能。仅适用于CG、BFGS、牛顿CG、L-BFGS-B、TNC、SLSQP、狗腿、,
信任ncg如果jac是布尔值且为真,则假定返回fun
梯度和目标函数。如果为假,梯度
将进行数字估算。jac也可以是一个可调用的返回
物镜的梯度。在这种情况下,它必须接受相同的条件
争论很有趣
(强调我的)谢谢你指出这一点!从文档/示例来看,这并不是非常明显,我觉得应该说明这项功能的重要性。我同意文档不是100%清楚。理想情况下,它应该说“假设fun返回一个元组,第一个元素是函数值,第二个元素是梯度”