1. 避免过拟合
-
overfitting
即过拟合,典型的表现为训练集损失远远小于验证集损失。而欠拟合则表现为训练集损失大于验证集损失。
要清楚远远大于的概念,如果训练集损失只比验证集损失多一点点的话,同等数量级(例如0.8与0.9)这种情况下并不是过拟合的表现。我们一般遇到的过拟合应该是0.8(训练集损失)与2.0(验证集损失)这种差距很大或者明显不在一个量级的损失比。 -
方法:使用Drop out
Dropout类似于bagging ensemble减少variance。也就是投通过投票来减少可变性**。通常我们在全连接层部分使用dropout,在卷积层则不使用。**但要声明,dropout并不适合所有的情况,请不要无脑上Dropout。
2. 数据集是否损坏?
- 数据集的好坏是算法泛化好坏的一个非常重要的前提条件,我们通常在构建深度学习的任务中,所得到的数据集一般不会是非常完美的(不论是自己搭建还是利用他人的数据,在数据集量过大的时候,数据集中难免会有图像损坏或者错误的个例)。
损坏的数据一定会影响计算的准确性。这个时候就需要我们自己去手动编写代码将那些错误且无法参与训练的图像挑选出来。 - 那么如何正确过滤这些图像呢?
找到损坏图像的特点,例如无法读取,编写程序去除无法读取的图像。
找到内容缺失的图像,这样的图像大小往往比普通图像小一些,通过过滤文件大小小于某一阈值去除。
3. 关于学习率(寻找合适的学习率)
- 学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同ba