2016-04-11 13 views

答えて

1

scipy.optimize.minimizeには、数値の近似(scipy.optimize.optimize._approx_fprime_helper)を行うためにさまざまなメソッドが内部で使用する関数と組み合わせて、各繰り返しの後に呼び出されるcallback関数を指定できます。一例として、rosen機能を使用すると:あなたはオプティマイザのソースコードに掘る場合_approx_fprime_helperが呼び出された場所が表示されます

exact: [-2.11963396 1.84037029 1.84037037 2.00372223 -0.08167787] 
approx: [-2.11963398 1.84037128 1.84037137 2.00372323 -0.08167684] 
----- 
exact: [-2.09674976 0.65207886 0.77546647 0.73540194 0.02017962] 
approx: [-2.0967498 0.65207981 0.77546742 0.73540298 0.02018057] 
----- 
exact: [-1.89973856 -1.67615541 -0.88726966 -1.04665196 0.08082156] 
approx: [-1.8997385 -1.67615442 -0.88726866 -1.04665099 0.08082255] 
----- 
exact: [ 0.71591999 -7.99959011 -2.81299766 -3.18692904 0.18447144] 
approx: [ 0.71592021 -7.99958908 -2.81299664 -3.18692805 0.18447244] 
----- 

import numpy as np 
from scipy.optimize import rosen, rosen_der, minimize 
from scipy.optimize.optimize import _approx_fprime_helper 

def callback(x): 
    print 'exact: ', rosen_der(x) 
    print 'approx: ', _approx_fprime_helper(x, rosen, 1E-8) 
    print '-----' 

x0 = np.zeros(5) 
res = minimize(rosen, x0, method='L-BFGS-B', callback=callback) 

これは、あなたのような何かを与えるだろう。それは、ここで定義されています:

https://github.com/scipy/scipy/blob/master/scipy/optimize/optimize.py#L601

はあなたが_approx_fprime_helperに渡すものとminimizeへの呼び出しで定義されているeps値と一致していることを確認します。

関連する問題