[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
对许多模型来说,除了准确率不够高,最核心的问题就是测试集上的结果不太稳定。如果能让测试集的结果更稳定,说不定模型还有继续增加迭代次数的可能。模型不稳定的理由通常为:
1)数据增强随机性太大、或batch_size太小
解决方法:取消数据增强,或削弱数据增强中随机的程度;增加batch_size
2)初始学习率太大,或迭代不稳定
解决方法:降低学习率lr或增加动量参数gamma,来帮助模型稳住迭代方向。如果使用的是Adam,则可以考虑增加值
3)模型的置信度低
解决方法:这种情况下,说明模型或架构的学习能力不足,需要更换架构、或通过特征工程降低数据的学习难度、或通过特征工程降低数据的学习难度、或增强架构的学习能力。
一般来说,我们先通过1)和2)进行调节,当实在无法改善时再考虑3)方法。
当模型经过调节已经非常平稳时,若模型表现为过拟合,可以尝试尝试一些对抗过拟合的方法,说不定能够再一次提升测试集上的准确率。
如果模型出现过拟合的情况,说明至少模型在训练集的学习并不存在问题,因此我们可以尝试各种过拟合的方法来视图消减训练集上的准确率、并提升测试集上的准确性,通常控制过拟合的方式有以下几种:
1)L1\L2正则化,或权重衰减
也就是在损失函数后加上权重的L1或L2范数表达式,让迭代的时候损失函数因正则项的存在而偏移,从
而阻止架构“精确”地学习数据。在优化算法中,我们可以通过参数weight_decay调整权重衰减值。这个
值非常敏感,因此调节难度极大,但我们还是可以尝试这么做。
2)Dropout/BN可以控制正则化
3)降低batch_size/数据增强,增加数据与数据之间的不相似性
这一点正好与迭代不稳定的情况相反。
4)降低模型的复杂度
我们可以消减模型的层、让卷积网络输出的特征图数量变少、让全连接层上输出的值变少,依次降低模型的参数量和复杂度。这个方法需要修改架构,因此当训练流程非常深入时,一般不考虑这个方法。
5)使用提前停止Early Stopping
如果上面5种手段都已经尝试过,但模型还是处于过拟合的状态,那可能需要剑走偏锋了:
6)检查是否使用了不恰当的数据处理过程方式、或参数初始化过程、或预训练过程
比如说,你训练集和测试集上使用的归一化参数不同,或者在过拟合的情况下使用了加速迭代的Xavier
初始化、或者使用完全与训练数据不相关的预训练流程等,这些都可能导致模型从训练集上学到的内容和测试集完全不同。同时,还有可能是我们忽视了测试集中的一些奇特的样本,导致模型缺乏足够的“不变性”,这种情况下我们可以再次探索数据,
更换数据增强的方式。
如果我们希望继续提升模型的效果,可以采用以下的几种手段,操作难度逐渐递增:
1 尝试使用预处理、各类初始化等手段,看看能否继续优化网络
2 深入研究标签类别,究竟哪些数字不容易被判断正确,针对这些数字或图像做特定的数据增强
3 学习论文中提到的各种手段和新兴模型,在新兴模型上尝试数据集的结果
4 获取最原始的数据集,重新创造图像尺寸更大的数据集,帮助我们加深网络