2017-05-04 49 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()'以确保范围是想要的范围,并且不会被基本乘法改变。 –

相关问题