清华大学驭风计划课程链接
学堂在线 - 精品在线课程学习平台 (xuetangx.com)
代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主
有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~
案例3:PyTorch实战: CIFAR10图像分类
1 用多层感知机(MLP)和卷积网络(ConvNet)完成CIFAR10分类
使用PyTorch分别实现多层感知机(MLP)和卷积网络(ConvNet),并完成CIFAR10数据集(http://www.cs.toronto.edu/~kriz/cifar.html)分类。本案例不提供初始代码,请自行配置网络和选取超参数,包括层数、卷积核数目、激活函数类型、损失函数类型、优化器等方面。
提交所有代码和一份案例报告,要求如下:
1详细介绍所使用的模型及其结果,至少包括超参数选取,损失函数、准确率及其曲线;
2比较不同模型配置下的结果,至少从三个方面作比较和分析,例如层数、卷积核数目、激活函数类型、损失函数类型、优化器等。
2 学习PyTorch ImageNet分类示例
请自行学习PyTorch官方提供的ImageNet分类示例代码,以便更好地完成后续案例(https://github.com/pytorch/examples/tree/master/imagenet)
3实验结果
1,详细介绍所使用的模型及其结果,至少包括超参数选取,损失函
数、准确率及其曲线;
在这里三个模型统一超参数,学习率为
0.001
,动量值为
0.9
,权重衰减值为
0.0001
,都用
SGD
优化器来进行训练,并且都使用了早停法三个周期不提升
0.5%
的正确率就停止训练,
结果如下
![](https://i-blog.csdnimg.cn/blog_migrate/ef194ee2804c85b742ce79657580f083.png)
2,比较不同模型配置下的结果,至少从三个方面作比较和分析,例如
层数、卷积核数目、激活函数类型、损失函数类型、优化器等。
层数:我把 MPL 模型加深的两层的全连接层来比较层数对于最终正确率的影响
MPL 模型结果:
![](https://i-blog.csdnimg.cn/blog_migrate/a271ce1290de9e1485b5bd8ce5fcb34b.png)
DeepMPL 模型结果:
![](https://i-blog.csdnimg.cn/blog_migrate/227cd6a1cbbec3b7eb19b3cfc608ff27.png)
从图中看 MPL 和 DeepMPL 这两个模型,六层全连接层的 DeepMPL 正确率略高
于层次较浅四层全连接层MPL模型,虽然层数更多的DeepMPL初始正确率不高,
但是随着更多周期的训练赶上的层数浅的 MPL 模型,从这里可以看出模型层数
更深对于结果是有一定的提升。
卷积核数目:这里我对比的是普通的 CNN+BN 模型和 ResNet+BN 模
型,它们统一加了批归一化。
CNN+BN 模型结果:
![](https://i-blog.csdnimg.cn/blog_migrate/0d6a556ac43ad355143e788e60ac692c.png)
ResNet+BN 模型结果:
![](https://i-blog.csdnimg.cn/blog_migrate/30ff196e93bbadf80b6c318e8efff5be.png)
ResNet 模型
在 ResNet 模型中,每个残差块包含了多个卷积层和批归一化层,用于提取图像特征。
根据模型定义,ResNet 模型中的卷积核数量如下:
第一层卷积层:卷积核数目为 64。
layer1: 每个 ResidualBlock 中的卷积核数目为 64,有 2 个 ResidualBlock。
layer2: 每个 ResidualBlock 中的卷积核数目为 128,有 2 个 ResidualBlock。
layer3: 每个 ResidualBlock 中的卷积核数目为 256,有 2 个 ResidualBlock。
将每个层次的卷积核总数相加并加上第一层的卷积核数目:
总卷积核数目 = 第一层卷积层 + (layer1 + layer2 + layer3) × 2
= 64 + (64 + 128 + 256) × 2
= 960
因此,这个 ResNet 模型中总共有 960 个卷积核
CNN 模型
CNN 模型中,有三个卷积层(conv1、conv2 和 conv3),每个卷积层都有一组卷积核。
卷积核的数量取决于在每个卷积层中设置的输出通道数。在模型中,这些输出通道数分
别为 64、128 和 256。每个卷积核与输入数据进行卷积操作,生成输出特征图。
第一层卷积层(conv1)有 64 个输出通道,因此有 64 个卷积核。
第二层卷积层(conv2)有 128 个输出通道,因此有 128 个卷积核。
第三层卷积层(conv3)有 256 个输出通道,因此有 256 个卷积核。
所以,总共有 64 + 128 + 256 = 448 个卷积核在 CNN 模型中
可以看出 ResNet 模型的卷积核数目是 CNN 模型的两倍之多,增加卷积核的数量可以增
加模型的复杂性和容量,使其能够更好地拟合训练数据,从而使得得出的正确率更高.
优化器:这里我用了同样两个 CNN+BN 模型,一个用 SGD 优化器,
一个用 Adam 优化器来进行训练比较。
SGD 优化器结果:
![](https://i-blog.csdnimg.cn/blog_migrate/68ae94ce9ddff21864479127f043a889.png)
Adam 优化器结果:
![](https://i-blog.csdnimg.cn/blog_migrate/56d8e9e14c59148d99bb86a06bd10af5.png)
从结果看出在相同超参数的情况下使用 Adam 优化器的结果反而没有 SGD 优化
器的结果好,在这里我也试着调整学习率发现使用 Adam 优化器学习率为 0.0001
的时候最优,结果如下
![](https://i-blog.csdnimg.cn/blog_migrate/f6127142a4191679aa40b8848ca88d48.png)
可以看出结果仍然略小于使用 SGD 优化器的结果,所以在这个数据集中 SGD 优
化器表现更出色,虽然 Adam 优化器能够自适应调整学习率适应不同参数的变化
情况,因此在某些情况下,Adam 可以更快地收敛并找到较好的局部极值。然而,
在某些情况下,Adam 可能会过于敏感,导致在训练后期震荡。
3,最终结果汇总
从汇总的分类结果看鸟和猫,还有狗的识别更难,个人猜测如下
视觉复杂性: 猫、狗和鸟都具有较高的视觉复杂性,它们在形态、纹理、颜色等方面的变
化较大,不同品种之间的差异也较大。这会增加模型在识别过程中的挑战,因为需要学会区
分各种差异。
图像大小和分辨率:
CIFAR-10
数据集中的图像尺寸相对较小,为
32x32
像素,这意味着
图像中的细节和特征可能被压缩和丢失,对于一些具有复杂纹理和形态的类别(如猫、狗和
鸟)来说,这可能导致难以捕捉到关键特征,从而影响识别性能