问题描述
我做了一个损失函数,用 scipy.optimize.minimize 最小化。 我有 4 个约束,每个参数一个。 模型收敛并以图形方式显示
接下来我使用 numdifftools 来估计我的工作点 (test.refrigeration.params) 的 Hessian 和梯度,但不知何故我的梯度与最小化不同:
print(test.refrigeration.solution)
print("\n\nnumdifftools says:")
print(nd.Gradient(test.refrigeration.loss_func)(test.refrigeration.params))
np.diag(nd.Hessdiag(test.refrigeration.loss_func)(test.refrigeration.params))
barrier_parameter: 2.048000000000001e-09
barrier_tolerance: 2.048000000000001e-09
cg_niter: 222
cg_stop_cond: 2
constr: [array([4.1433835e-08]),array([4.94572523]),array([11.74266572]),array([205.95208536])]
constr_nfev: [705,705,705]
constr_nhev: [0,0]
constr_njev: [0,0]
constr_penalty: 1.0
constr_violation: 0.0
execution_time: 1.0886585712432861
fun: -1792.2267544952138
grad: array([ 3.08927155e+01,6.17049604e-06,-1.84790740e-06,1.11133536e-06])
jac: [array([[1.,0.,0.]]),array([[0.,1.,array([[ 0.,-1.,1.]])]
lagrangian_grad: array([ 6.75015599e-14,5.92773968e-06,-1.83442944e-06,1.11129922e-06])
message: '`xtol` termination condition is satisfied.'
method: 'tr_interior_point'
nfev: 705
nhev: 0
nit: 111
niter: 111
njev: 0
optimality: 5.927739681029311e-06
status: 2
success: True
tr_radius: 1.0000000000000005e-09
v: [array([-30.89271545]),array([-2.42756355e-07]),array([-1.34779589e-08]),array([-3.61438995e-11])]
x: array([4.14338350e-08,4.94572523e+00,8.25733428e+00,2.05952085e+02])
numdifftools says:
[ -6.66111424 -36.09243261 -1.43150895 1.21950988]
array([[1064.99313683,1078.59848891,-391.34793412,81.81580485],[1078.59848891,1076.86601335,-392.64416079,79.45896535],[-391.34793412,188.84604161,-39.58414431],[ 81.81580485,79.45896535,-39.58414431,10.6479105 ]])
为什么 numdifftools 不能在同一点为同一个函数提供相同的梯度?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)