1.网络架构的修改
网络层数、卷积核大小、滑动步长,学习速率这些参数的设置大多是通过已有的架构来做一些微调
2.对于自己搭建好的网络架构,判断其可行性?
用一小批数据进行训练,让其过拟合。如果训练后,效果很差,这都不能过拟合的话,说明该网络架构可能有问题。
3.训练了很久,训练集,测试集准确率都很低,这种现象可能是欠拟合,怎么办?
针对欠拟合就是要增强模型的拟合能力。例如增加网络层数,增加节点数,减少dropout值,减少L2正则值等等。
4.训练集的准确率较高,测试集的却很低,这种现象可能是过拟合,怎么办?
针对过拟合就是要提高模型的泛化能力,例如正则化、dropout、加大数据集、简化网络架构等等。
5.训练时,loss和学习率出现先下降,后上升,再下降的情况,这属于正常现象(可以理解为网络用这种方法来跳出局部最优)。https://blog.csdn.net/CarryLvan/article/details/104394960
6.如何加快调参速度?
调参只是为了寻找合适的参数,而不是产出最终模型。一般在小数据集上合适的参数,在大数据集上效果也不会太差。因此可以尝试对数据进行精简,以提高速度,在有限的时间内可以尝试更多参数。
- 对训练数据进行采样。例如原来100W条数据,先采样成1W,进行实验看看。
- 减少训练类别。例如手写数字识别任务,原来是10个类别,那么我们可以先在2个类别上训练,看看结果如何。
7.超参数的经验设置
- 学习率:1e-4~1e-7范围内,这个范围的学习率能够在大部分网络能够保障网络以较为稳定的速度下降,并得到较好的结果。
注:学习率过大,例如1e-1~1e-3,可能导致局部最优,但是初期下降会比较快,初期可以先这样设置学习率高一点,训练一段时间再降低。 - 每层隐藏层的结点数: 16、32、64、128、512,超过1000的情况比较少见。超过1W的从来没有见过。
- batch size: 128上下开始。batch size值增加,的确能提高训练速度。但是有可能收敛结果变差。如果显存大小允许,可以考虑从一个比较大的值开始尝试。因为batch size太大,一般不会对结果有太大的影响,而batch size太小的话,结果有可能很差。
- dropout: 0.5