CIFAR-10训练笔记
The CIFAR-10 dataset Training records
这篇博文主要记录我对CIFAR-10这个数据集的训练过程及相关的思考
官网介绍
搭建模型
优化器采用 AdaGRad,learining=0.01 这个模型没有加激活函数
最终在验证集上的准确率是 66.58%,并且没有很明显的过拟合现象,并且在epoch=30之后,就停止了学习
相关代码请查看https://github.com/
基于VGG16的训练
刚开始的小坑
开始我用的是VGG16
训练过程截图:
但是最终效果不太好,在验证集上最好也只有 72%的准确率.然后我就去查阅了VGG16的源码:
我猜测:VGG16原先是用于1000分类,神经网络的层级太深,10分类(小规模)不适合用VGG16
简化VGG16--VGG16_simplified
所以我基于VGG16的源码将模型简化为VGG16_simplified:
VGG16_simplified结构
VGG16_simplified过拟合了
在验证集上的表现是76%的准确率
抑制VGG16_simplified的过拟合
- 添加L2正则化
模型的表现张力收到了抑制,测试集上的准确率甚至降为了: 70.7%,还不如过拟合的时候...
- 寻求前辈的指导
我把网络结构和遇到的问题发给了师哥,他说我的网络参数太多了,改的更少一些,128,256这样,我按照这个修改了
首先是网络的学习变快了(参数变少),其次准确率是 71.6%.但还是没有使准确率有一个更高的提升.我想突破80%.
进一步简化后的模型是这样的:
但这个参数简化后的模型到了最后已经停止了学习.
转用Resnet
跟着网课学习了一下ResNet的大体结构,但是网络实现源码还没太看明白
最终模型在验证集上的最高准确率达到了 82.32%,何凯明yyds!!
总结
- 各模型对比
模型 | 验证集准确率 | 参数数量(运算速度) |
---|---|---|
Cir | 66.58% | 90,080 |
Vgg16 | 72% | 138,357,544 |
Vgg16_simplified | 76% | 573,888 |
Resnet18 | 82.32% | 33,161,024 |
备注:cir是最开始自己搭建的极简模型
-
模型越深,但是效果不用好,更加大了计算量.
-
Resnet18是表现最好的模型
- 加深了对调参的认识,比如当loss变化不明显时可以缩小学习率,过拟合时添加正则化.学习率的选取等等
- 我一开始用我笔记本的电脑跑了一会Resnet,epoch=3的时候,温度就要命了,电脑烫手,后来赶紧去用Colaboratory
相关代码请查看:github
本文来自博客园,作者:CuriosityWang,转载请注明原文链接:https://www.cnblogs.com/curiositywang/p/15129658.html