我有一个非常简单的ANN使用Tensorflow和AdamOptimizer来解决回归问题,现在我正在调整所有超参数。
现在,我看到了许多不同的超参数,我必须调整:
我有两个问题:
1)你看到我可能忘记的任何其他超参数吗?
2)目前,我的调音非常“手动”,我不确定我是不是以正确的方式做所有事情。 是否有特殊的顺序来调整参数?首先是学习率,然后是批量大小,然后...... 我不确定所有这些参数是否独立 - 事实上,我很确定其中一些参数不是。哪些明显独立,哪些明显不独立?我们应该把它们调在一起吗? 是否有任何纸张或文章谈论正确调整特殊订单中的所有参数?
编辑: 以下是我获得的不同初始学习率,批量大小和正则化参数的图表。紫色曲线对我来说是完全奇怪的...因为成本随着其他方式慢慢下降,但它却以较低的准确率陷入困境。该模型是否可能陷入局部最小值?
对于学习率,我使用了衰变: LR(t)= LRI / sqrt(epoch)
感谢您的帮助! 保罗
答案 0 :(得分:6)
我的一般订单是:
<强>依赖关系:强>
我假设
的最佳值强烈依赖彼此。我不是那个领域的专家。
至于您的超参数:
答案 1 :(得分:3)
让Tensorboard运行。在那里绘制错误。您需要在TB查找要绘制的数据的路径中创建子目录。我在脚本中创建了子目录。所以我在脚本中更改了一个参数,在那里给试验命名,运行它,并在同一个图表中绘制所有试验。您很快就会感受到图表和数据的最有效设置。
答案 2 :(得分:2)
对于不那么重要的参数,您可以选择一个合理的值并坚持下去。
如你所说,这些参数的最佳值都相互依赖。最简单的方法是为每个超参数定义一个合理的值范围。然后从每个范围中随机采样参数并使用该设置训练模型。重复这一次,然后选择最好的模型。如果您很幸运,您将能够分析哪些超参数设置最有效,并从中得出一些结论。
答案 3 :(得分:0)
我不知道任何特定于tensorflow的工具,但最好的策略是首先从基本的超参数开始,例如学习率为0.01,0.001,weight_decay为0.005,0.0005。然后调整它们。手动完成这将花费大量时间,如果您正在使用caffe,以下是从一组输入值中获取超参数的最佳选项,并将为您提供最佳设置。
https://github.com/kuz/caffe-with-spearmint
有关详细信息,您也可以按照本教程进行操作:
http://fastml.com/optimizing-hyperparams-with-hyperopt/
对于层数,我建议你做的是首先制作更小的网络并增加数据,在你有足够的数据后,增加模型的复杂性。
答案 4 :(得分:0)
开始之前:
batch size
设置为可在您的硬件上运行的最大值(或2的最大幂)。只需增加它,直到出现CUDA错误(或系统RAM使用率> 90%)。然后,如果您想要一个接一个地做,我会这样:
大范围地调learning rate
。
调整优化器的其他参数。
调整音色(丢失,L2等)。
微调learning rate
-这是最重要的超参数。