我正在使用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:這可以用python中的多線程輕鬆縮放嗎? 2:是否有其他優化可以嘗試?
從我看到你似乎沒有用於多線程,這基本上是告訴你的代碼「在等待響應時做其他事情」,因爲你不等待任何事情,什麼是實際處理時間。我建議看看多處理,特別是'concurrent.futures'庫 – LoicM
感謝您的評論。我不知道這個圖書館存在。現在就來看看! – Luca
@LoicM不幸的是,由於一些遺留的原因,我堅持使用python2.7:/ – Luca