2017-05-04 51 views
1

有什麼有效的方法我可以優化該神經網絡..具有多個輸入的網絡的超參數優化?

map = {} 
for batch in xrange(1,100,1): 
    for lr in np.arange(0.00001,1,0.0000001): 
     for decay in np.arange(0.0000001,1,0.0000001): 
      for momentum in np.arange(0.001,1,0.01): 
       print 'batch_' + str(batch) + '_lr_' + str(lr) + '_decay_' + str(decay) + '_momentum_' + str(momentum) 
       result = model(batch,lr,decay,momentum) 
       print result 
       map['batch_' + str(batch) + '_lr_' + str(lr) + '_decay_' + str(decay) + '_momentum_' + str(momentum)] = result 

np.save('sgd_opt.npy', map) 

目前,正在使用多個for循環做 - 不是沒有這樣做的任何其它的有效方法?

+0

如果您關心速度,那麼肯定會有所作爲的一件事是,您無需測試900萬種不同的學習速率。採取更大的步驟。 –

+0

@aryamccarthy的建議? lr通過ti sgd優化器。 –

+0

這是我的建議:你一起測試10^7的學習率,10^7衰減和10^2動量。這太多了。您正在評估10^16個不同的模型。讓我們慷慨*說你的模型只需要0.3秒來訓練和測試。然後它將花費150萬年**來測試所有組合。測試更少的組合,可能使用'np.logspace'。 –

回答

1

測試更少的組合。使用np.logspace而不是np.arange

for lr in np.logspace(1E-5, 1, 6): # Tests 1E-5, 1E-4, ..., 1 

在0.00012和0.00013之間的學習率可能沒有太大的差別。你不需要測試所有這些。

如果您想測試6個以上的學習率,請繼續。這會讓你有一個很好的傳播,你應該爲你的衰敗和勢頭做同樣的事情。您可以測試6個學習率,6個衰減和3個勢頭(共108個組合),並可能獲得與原始代碼使用的數百萬步驟相同的益處。

+0

也許增加'np.log10()'以確保範圍是想要的範圍,並且不會被基本乘法改變。 –

相關問題