私はlmfit
を使用して最適化を行っていますが、それは非常に遅いです。私は大きな画像を持っており、基本的にはすべてのピクセルで最小二乗最小化を実行しています。おそらく、現時点では辛抱強く遅いので、マルチスレッドや他のタイプの最適化には理想的です。Pythonでのマルチスレッド最適化
次のように、私の最適化コードは次のとおりです。
私のように目的関数を定義する:だから
def objective(params, x, data):
s0 = params['S0']
t1 = params['T1']
m = s0 * (1.0 - np.exp(-x/t1))
return m - data
、私はモデルと観測の間の差を最小化しようとしています。私はだと思いますlmfit絶対値が最小限に抑えられていることを確認しますが、わかりませんので、確認する必要があります。
メインループは次のとおりです。
私は次のようにいくつかの初期値で初期化されていると推定するのに必要なパラメータは:
p = Parameters()
p.add('S0', value=1.0)
p.add('T1', value=3.0)
final_data = <numpy image>
tis = np.asarray([1.0, 2.0, 3.0])
for i in range(final_data.shape[0]):
print "Processing pixel: ", i
minner = Minimizer(objective, params=p, fcn_args=np.asarray(tis),
final_data[i, :]),
nan_policy='propagate')
result = minner.minimize(method='least_squares')
s0_data[i] = result.params['S0']
t1_data[i] = result.params['T1']
これは正常に動作しますが、それはうんざりするほど遅いです。私はPythonでマルチスレッドを行う方法を理解しようとしていたし、GILのロックに関する投稿について完全に混乱していて、Pythonでのマルチスレッドは実際には存在しません。
私の質問は: 1:これは簡単にマルチスレッドで拡大縮小できますか? 2:私が試すことができる他の最適化はありますか?
私はあなたが何かを待っているわけではなく、実際には何かを待っているので、基本的にあなたのコードに "応答を待っている間に何かをする"と言っているマルチスレッド処理時間。代わりに、特に 'concurrent.futures'ライブラリを使ってマルチプロセッシングを調べることをお勧めします。 – LoicM
コメントありがとうございます。私はこのライブラリが存在するかどうかはわかりませんでした。今見てみましょう! – Luca
@LoicM残念ながら、いくつかの遺跡の理由から、私はpython2.7に悩まされています:/ – Luca