scipy.optimize.minimizeを使用して調整したいコンピュータービジョンアルゴリズムがあります。今は2つのパラメーターだけを調整したいのですが、最終的にはパラメーターの数が増える可能性があるので、高次元の勾配検索ができる手法を使用したいと思います。SciPyでのネルダーミードの実装はぴったりのようでした。
コードをすべて設定しましたが、minimize関数は、ステップサイズが1未満の浮動小数点値を実際に使用したいと考えているようです。現在のパラメーターのセットは両方とも整数であり、一方のステップサイズはもう一方です。ステップサイズは2です(つまり、値は奇数でなければなりません。最適化しようとしているものでない場合は、奇数に変換されます)。大まかに1つのパラメーターはピクセル単位のウィンドウサイズであり、もう1つのパラメーターはしきい値(0〜255の値)です。
価値があるのは、gitリポジトリからのscipyの新しいビルドを使用していることです。各パラメーターに特定のステップサイズを使用するようにscipyに指示する方法を知っている人はいますか?自分のグラデーション関数をロールする方法はありますか?私を助けることができるscipyフラグはありますか?これは単純なパラメータースイープで実行できることは承知していますが、最終的には、このコードをはるかに大きなパラメーターのセットに適用したいと思います。
コード自体は非常に単純です。
import numpy as np
from scipy.optimize import minimize
from ScannerUtil import straightenImg
import bson
def doSingleIteration(parameters):
# do some machine vision magic
# return the difference between my value and the truth value
parameters = np.array([11,10])
res = minimize( doSingleIteration, parameters, method='Nelder-Mead',options={'xtol': 1e-2, 'disp': True,'ftol':1.0,}) #not sure if these params do anything
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
print res
これは私の出力がどのように見えるかです。ご覧のとおり、多くの実行を繰り返しており、最小化のどこにも到達していません。
*+++++++++++++++++++++++++++++++++++++++++
[ 11. 10.] <-- Output from scipy minimize
{'block_size': 11, 'degree': 10} <-- input to my algorithm rounded and made int
+++++++++++++++++++++++++++++++++++++++++
120 <-- output of the function I am trying to minimize
+++++++++++++++++++++++++++++++++++++++++
[ 11.55 10. ]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11. 10.5]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11.55 9.5 ]
{'block_size': 11, 'degree': 9}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11.1375 10.25 ]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11.275 10. ]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11. 10.25]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
[ 11.275 9.75 ]
{'block_size': 11, 'degree': 9}
+++++++++++++++++++++++++++++++++++++++++
120
+++++++++++++++++++++++++++++++++++++++++
~~~
SNIP
~~~
+++++++++++++++++++++++++++++++++++++++++
[ 11. 10.0078125]
{'block_size': 11, 'degree': 10}
+++++++++++++++++++++++++++++++++++++++++
120
Optimization terminated successfully.
Current function value: 120.000000
Iterations: 7
Function evaluations: 27
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
status: 0
nfev: 27
success: True
fun: 120.0
x: array([ 11., 10.])
message: 'Optimization terminated successfully.'
nit: 7*