深度学习网络调参技巧

匿名 (未验证) 提交于 2019-12-02 23:36:01

1.好的实验环境是成功的一半

(b)可以输出模型的损失函数值以及训练集验证集上的准确率

(c)可以考虑设计一个子程序,可以根据给定的参数,启动训练并监调和周期性保存评估结果。再由一个主程序,分配参数以及并行启动一系列子程序。

2.画图

(b)如果训练到最后,训练集、验证集的准确率都很低,那么说明模型有可能欠拟合。需要增强模型拟合能力:1.增加网络的层数,增加节点数、减少dropout的值、减少l2正则值等等。

(c)如果训练集的准确率很高,但是测试集的准确率很低,那么模型有可能过拟合,这个时候需要提高模型的泛化能力,调节参数。

3.从粗到细分阶段调参

(a)建议参考论文,以论文中给出的参数作为初始参数

(b)如果找不到参考,只能自己尝试了,先从比较重要,对实验结果影响比较大的参数开始,同时固定其他的参数,得到一个差不多的结果之后,在这个结果的基础上,在调其他的参数。例如:学习速率一般比正则值、dropout值重要

(c)如果实在找不到一组参数可以让模型收敛,那么需要检查,是不是其他地方出问题。例如模型的实现、数据等等

4.提高速度

调参是为了寻找合适的参数,而不是产出最终模型,一般在小的数据集上合适的参数,在大的数据集上的效果也不会太差,因此可以尝试对数据进行精简,以提高速度,在有限的时间内尝试更多的参数。

(a)对训练数据集进行采样

(b)减少训练类别,例如:首先数字识别任务,10个类别,我们先可以在2个类别上训练,看看效果如何

5.经验参数

(a)learning rate:1,0.1,0.01,0.001, 学习速率一般随着训练进行衰减,衰减系数一般是0.5。

衰减时机:验证集准确率不在上升时,或固定训练多少个周期后,一般建议自适应梯度的方法:adam、adadelta、rmsprop

对于rnn来说,如果rnn要处理的序列比较长,或者rnn的层数比较多,那么学习速率一般小一些比较好。

(b)网络层数:先从1层开始

(c)每层节点数:16,32,128

(d)batch_size:128上下开始。batch_size的值增加,的确能够提高训练速度,但是有可能收敛的效果变差。如果显存允许的话,可以考虑从一个比较大的值开始尝试,因为batchsize太大,一般不会对结果产生太大的影响,而太小的话,结果有可能变差。

(e)dropout: 0.5,0.3,0.7

(g)正负样本比例:除了尝试选择默认的正负样本比例之外,建议对数目较少的样本做过采样,例如进行复制。在minibatch方法进行训练的时候,尽量让一个batch内,各类别的比例平衡,这个在图像识别等多分类任务上非常重要。

总结

1.合理性的检查,确定模型数据和其他地方没有问题

2.训练数据时,跟踪损失函数值,训练集和验证集的准确率

3.一定要用dropout。有两种方法可以不用。1.数据量特别小2.使用了更好的正则方法bn

4.fine-tuning是必然的。尤其在nlp中,如果只是使用word2vec训练的词向量作为特征表示,很产生很大的损失值

5.类目不均衡问题。如果你的损失值被一部分类别dominate,对总体而言大多是负向的。建议可以尝试类似于booststrap方法调整loss中样本权重的方式解决。

6.避免训练震荡。默认一定要增加随机采样因素尽可能使得数据的分布随机。默认的shuffle机制能使得训练的结果更加稳定。如果训练的模型仍然很震荡,可以考虑调整学习速率或mini_batch_size。


文章来源: https://blog.csdn.net/qq_42450404/article/details/90725683
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!