构建我的图像分类框架记录
参考资料
github: bearpaw-pytorch-classification
数据集
cifar10
参考博客CIFAR-10数据集说明
该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
模型选择
mobilnet系列
- mobilenetv3
(torchpy36) air@air-System-Product-Name:~/model-train/CNN/pytorch-classification$ python cifar.py -d cifar10 -j 4 -a mobilenetv3 --epochs 1 --train-batch 32 --schedule 81 122 --gamma 0.1 --checkpoint checkpoints/cifar10/mobilenetv3 --model_mode LARGE
参考博客
CNN-mobilnet系列论文解读与应用
Pytorch实现MobileNetV2
评价指标
训练trick整理
参考博客:神经网络的调参技巧与关键点汇总
- warn up
调参
- 合适的batch_size
网络结构调优 resnet系列
- 激活函数 , 使用较多的是Leaky ReLU、ELU、maxout
学习衰减策略
- 采用cosine函数作为学习率衰减策略 Cosine Decay compared to Step Decay
Cosine衰减的公式为:
- 添加更深层次的网络
- 使用前人调好的稳定模型
- 选择合适的优化算法
- 随机梯度下降
- 动量梯度下降
- AdaGrad优化算法, 梯度会随着训练次数的增加而降低,因此受学习率的影响会变小。
- RMSProp优化算法,解决了训练后期提前结束的问题,谷歌的alpha go围棋机器人就采用的这种优化算法。
- Adam优化算法的提出集众家之长,是我们平时最常用的优化算法
- dropout训练
dropout层的设置是为了防止模型训练的过拟合,与损失函数上的正则化项本质很相似,所以dropout层也只是在训练上进行添加,测试与验证过程从不会使用dropout。
标签平滑
知识蒸馏
使用ResNet-152作为teacher model,而ResNet-50作student model。