如何使用scipy.optimize.最小化函数,当你想计算梯度和目标函数



scipy.optimize.minimzeobjjac函数作为输入。 我相信它会在需要时单独调用它们。但通常情况下,我们会遇到目标函数,其梯度计算共享来自目标函数的大量计算。所以理想情况下,我想同时计算objgrad。但这个图书馆似乎不是这样吗?如果一个人仍然想使用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 也可以是可调用的回报 目标的梯度。在这种情况下,它必须接受相同的 争论很有趣。

(强调我的)

相关内容

  • 没有找到相关文章

最新更新