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返回一个元组,第一个元素是函数值,第二个元素是梯度”