> 文章列表 > pytorch通过不同的维度提高cifar10准确率

pytorch通过不同的维度提高cifar10准确率

pytorch通过不同的维度提高cifar10准确率

各个维度

    • 通过模型
    • 通过优化器
    • 通过batchsize
    • 通过数据增强
    • 总结

当前网络的博客上都是普遍采用某个迁移学习训练cifar10,无论是vgg,resnet还是其他变种模型,最后通过实例代码,将cifar的acc达到95以上,本篇博客将采用不同的维度去训练cifar10,研究各个维度对cifar10准确率的影响,当然,此篇博客,可能尚不完全准确,如有不对,欢迎指正修改,此篇博客只作为本人实验参考的一部分

通过模型

首先,数据集上不变的情况(注意,图片size均为224,loss为交叉熵),第一种考虑的情况自然是模型,现在市场上的分类模型无非就是那么几种,从最小的mobile net到最后的resnet,resnext,desnet等(注意:此处模型不考虑transformer,只考虑cv模型,但是根据排行榜的情况看来,transformer的模型精度效果更高,https://paperswithcode.com/sota/image-classification-on-cifar-10),对于传统模型而言,肯定是模型越大,精度越高,下面我采用torchvision中,最大的两个resnet模型及变体进行了测试,在常规训练20轮后得到以下效果:

resnet152
pytorch通过不同的维度提高cifar10准确率
resnext101_32x8d
pytorch通过不同的维度提高cifar10准确率
这两个大模型精度确实高,但是模型本身参数量也很大,大概都在3,40g左右,对于像传统分类数据集而言,如果只追求精度,可以考虑这种情况,下面来试一下小型的模型的精度,以下是测试

vgg16
pytorch通过不同的维度提高cifar10准确率
resnet18
pytorch通过不同的维度提高cifar10准确率
moblienetv3
pytorch通过不同的维度提高cifar10准确率
越小的模型同样精度也会稍差一点,如果是一般实验,resnet18看起来就够了

通过优化器

对于优化器而言,这里不采用过多的优化器测试,仅仅使用sgd和adam做测试,所以随便采用一种模型去常规训练即可得到结果

adam

pytorch通过不同的维度提高cifar10准确率
sgd
pytorch通过不同的维度提高cifar10准确率
对于cifar10而言,sgd优化器和adam优化器差异并不大,此次训练中,sgd略优于adam,但是不代表,其他超参数的调整,sgd一直略胜于adam

通过batchsize

由于训练时长原因,这里采用较为简单的resnet18作为测试,通过不同的batchsize,来反应平均loss和acc

batchsize loss acc
16 0.7 94.1
32 0.09 94.8
64 0.03 95.6
128 0.07 95.4

最后batchsize为64,当然,其他模型可能反应出不同的效果,上份数据不代表普遍性

通过数据增强

与batchsize一样,下面通过常规的几种数据增强方式,用resnet18作为测试,来反应平均loss和acc(注意:以下数据增强,将采用数据增强后,size统一转为244后,在进行归一化后的操作,也就是T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]))

batchsize loss acc
T.Resize(256),T.CenterCrop(224), 0.3 95.2
T.RandomGrayscale(p=0.25), 0.07 94.6
T.ColorJitter(hue=.05, saturation=.05), 0.11 93.8
T.RandomResizedCrop((64,64), scale=(0.8, 1)), 0.07 94.5

通过表格数据得知,通过放大后,在进行中心裁剪的操作,可以使模型更容易泛化,本人感觉,应该是图形放大后,图像的特征更适合resnet18了,当然了,上份数据不代表普遍性

总结

大模型的参数量高精度更高,对于一般的实验项目而言,想要获得最好的精度,我总结了一下,使用如下配置

backbone:resnet18(在不进行魔改的情况下)
batch_size: 64
数据增强:T.Compose(
[
T.Resize(256),
T.CenterCrop(224),
T.ToTensor(),
T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
优化器:sgd

经过50轮迭代训练后,达到如下准确率
pytorch通过不同的维度提高cifar10准确率
96的准确率,如果将模型换成resnet50或者更大的模型,准确率将会进一步提升