# 基于 ResNet18 网络的十分类任务
## 1 任务描述
### 1.1 作业要求
完成 10 类图片的分类问题,图像示例及类别如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/6c523033ca1a94334c44bcb1d4e313fc.writebug)
图 1:图像示例
### 1.2 作业完成情况
本次大作业我使用 python 语言,利用 pytorch 框架搭建 Resnet18 网络进行分类任务,最终实现了 90% 左右的准确率。
![](https://www.writebug.com/myres/static/uploads/2021/12/31/5dfb8a88eb3b4f805a8f7697f0168466.writebug)
## 2 问题建模
本次大作业我最终采用了 ResNet18 作为最终的网络架构,虽然 torchvision.models 有对应的函数,但是为了我还是选择自己手动编写这一网络。
### 2.1ResidualBlock
结构图如图 2(a)所示。优点:使用普通的连接,上层的梯度必须要一层一层传回来,而使用残差连接,相当于中间有了一条更短的路,梯度能够从这条更短的路传回来,避免了梯度过小的情况。拟合公式:*H*(*X*)=*F*(*X*)+*X*
![](https://www.writebug.com/myres/static/uploads/2021/12/31/1d7f0e67cdebfb7cae43b5ea8e26c26a.writebug)![](https://www.writebug.com/myres/static/uploads/2021/12/31/0d2ca0bce6b05ba5d0b1cb50b089a958.writebug)
(a)ResidualBlock (b)ResNet18
图 2:神经网络结构图
### 2.2ResNet18
通过若干 ResidualBlock 的堆叠,可以构造出如图 2(b)所示的残差网络 ResNet18.
其各 Layer 参数如下表
表 1:LayersofResNet18
| Layer(type) | OutputShape | Param# |
| --------------- | ------------- | ------ |
| Conv2d-1 | [-1,64,32,32] | 576 |
| BatchNorm2d-2 | [-1,64,32,32] | 128 |
| ReLU-3 | [-1,64,32,32] | 0 |
| Conv2d-4 | [-1,64,32,32] | 36,864 |
| BatchNorm2d-5 | [-1,64,32,32] | 128 |
| ReLU-6 | [-1,64,32,32] | 0 |
| Conv2d-7 | [-1,64,32,32] | 36,864 |
| BatchNorm2d-8 | [-1,64,32,32] | 128 |
| ResidualBlock-9 | [-1,64,32,32] | 0 |
| Conv2d-10 | [-1,64,32,32] | 36,864 |
| | 续表 | | |
| ---------------- | -------------- | ------- | - |
| Layer(type) | OutputShape | Param# | |
| BatchNorm2d-ll | [-1,64,32,32] | 128 | |
| ReLU-12 | [-1,64,32,32] | 0 | |
| Conv2d-13 | [-1,64,32,32] | 36,864 | |
| BatchNorm2d-14 | [-1,64,32,32] | 128 | |
| ResidualBlock-15 | [-1,64,32,32] | 0 | |
| Conv2d-16 | [-1,128,16,16] | 73,728 | |
| BatchNorm2d-17 | [-1,128,16,16] | 256 | |
| ReLU-18 | [-1,128,16,16] | 0 | |
| Conv2d-19 | [-1,128,16,16] | 147,456 | |
| BatchNorm2d-20 | [-1,128,16,16] | 256 | |
| Conv2d-21 | [-1,128,16,16] | 8,192 | |
| BatchNorm2d-22 | [-1,128,16,16] | 256 | |
| ResidualBlock-23 | [-1,128,16,16] | 0 | |
| Conv2d-24 | [-1,128,16,16] | 147,456 | |
| BatchNorm2d-25 | [-1,128,16,16] | 256 | |
| ReLU-26 | [-1,128,16,16] | 0 | |
| Conv2d-27 | [-1,128,16,16] | 147,456 | |
| BatchNorm2d-28 | [-1,128,16,16] | 256 | |
| ResidualBlock-29 | [-1,128,16,16] | 0 | |
| Conv2d-30 | [-1,256,8,8] | 294,912 | |
| BatchNorm2d-31 | [-1,256,8,8] | 512 | |
| ReLU-32 | [-1,256,8,8] | 0 | |
| Conv2d-33 | [-1,256,8,8] | 589,824 | |
| BatchNorm2d-34 | [-1,256,8,8] | 512 | |
| Conv2d-35 | [-1,256,8,8] | 32,768 | |
| BatchNorm2d-36 | [-1,256,8,8] | 512 | |
| ResidualBlock-37 | [-1,256,8,8] | 0 | |
| Conv2d-38 | [-1,256,8,8] | 589,824 | |
| BatchNorm2d-39 | [-1,256,8,8] | 512 | |
| ReLU-40 | [-1,256,8,8] | 0 | |
| Conv2d-41 | [-1,256,8,8] | 589,824 | |
| BatchNorm2d-42 | [-1,256,8,8] | 512 | |
| ResidualBlock-43 | [-1,256,8,8] | 0 | |
| | 续表 | | |
| ---------------- | ------------ | --------- | - |
| Layer(type) | OutputShape | Param# | |
| Conv2d-44 | [-1,512,4,4] | 1,179,648 | |
| BatchNorm2d-45 | [-1,512,4,4] | 1,024 | |
| ReLU-46 | [-1,512,4,4] | 0 | |
| Conv2d-47 | [-1,512,4,4] | 2,359,296 | |
| BatchNorm2d-48 | [-1,512,4,4] | 1,024 | |
| Conv2d-49 | [-1,512,4,4] | 131,072 | |
| BatchNorm2d-50 | [-1,512,4,4] | 1024 | |
| ResidualBlock-51 | [-1,512,4,4] | 0 | |
| Conv2d-52 | [-1,512,4,4] | 2,359,296 | |
| BatchNorm2d-53 | [-1,512,4,4] | 1,024 | |
| ReLU-54 | [-1,512,4,4] | 0 | |
| Conv2d-55 | [-1,512,4,4] | 2,359,296 | |
| BatchNorm2d-56 | [-1,512,4,4] | 1,024 | |
| ResidualBlock-57 | [-1,512,4,4] | 0 | |
| Linear-58 | [-1,10] | 5,130 | |
ResNet18 参数:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/18fe591d0f5053709e145de45d4e0423.writebug)
以上数据根据 torchsummary 中自带的 summary 函数生成,可知该网络共有 58 层,总共 11,172,810 个参数。
## 3 算法设计和实现
### 3.1 优化器的选择
本次大作业选用的是 Adam 优化器,Adam 本质上是带有动量项的 RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。它的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。其公式如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/3d656aa45a5056af79dba42ee036189b.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/31/f056eb69c39811f48a00e15e270eb62e.writebug)其中,前两个公式分别是对梯度的一阶矩估计和二阶矩估计,可以看作是对期望 *E*|*gt*|,*E*|*g*2| 的估计;公式 3、4 是对一阶二阶矩估计的校正,这样可以近似为对期望的无偏估计。可以看出,直接对梯度的矩估计对内存没有额外的要求,而且可以根据梯度进行动态调整。最后一项前面部分是对学习率 n 形成的一个动态约束,而且有明确的范围。
优化器实现:
可使用 torch.optim.Adam 函数直接实现,其参数:params(iterable):可用于迭代优化的参数或者定义参数组的 dicts;lr(float,optional):学习率;
betas(Tuple[float,float],optional):用于计算梯度的平均和平方的系数;eps(float,optional):为了提高数值稳定性而添加到分母的一个项;weight_decay(float,optional):权重衰减(如 L2 惩罚);
### 3.2 损失函数的选择
选择交叉熵作为损失函数,其公式为:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/908e496e3f6a549bc16e2bb8db353e2e.writebug)
其中 *p*(*xi*)是预测结果,*q*(*xi*)是 groundtruth。损失函数实现:可使用 nn.CrossEntropyLoss()函数直接实现。
### 3.3 数据增强
定义如下的数据增强对训练集数据进行处理:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/67a19151dc95378d168983252ba09fb5.writebug)
处理效果如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/31/e90e59d8cb60cc031034ad889d51ef00.writebug)
图 3:数据增强效果
### 3.4 学习率衰减
![](https://www.writebug.com/myres/static/uploads/2021/12/31/54d1b79c9e9feebfc4a53740ad0861de.writebug)
图 4:学习率衰减曲线
采用学习率递减的算法,初始学习率设为 0.1,其变化为每 10 个 epoch 衰减二分之一,则前 90 个 Epoch 的学习率如图 4 所示.
## 4 分类结果
在 30000 个数据中取 27000 个作为数据集,3000 个作为验证集,利用上述网络和方法进行分类,结果如图 5。
### 4.1 曲线图
![](https://www.writebug.com/myres/static/uploads/2021/12/31/72d7faed4cd63c80b1801cb91deb9830.writebug)
(a)准确率曲线
![](https://www.writebug.com/myres/static/uploads/2021/12/31/464108a8091dbee60356228375a9d4b1.writebug)
(b)损失函数曲线
图 5:分类结果曲线
### 4
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
100011286-基于Python ResNet18 网络的十分类任务.zip (18个子文件)
resnet
Kaggle_Info.txt 177B
Code
TestModel.py 617B
TrainModel.py 3KB
myData.py 2KB
myNet.py 2KB
LICENSE 1KB
Pictures
PCA.jpg 62KB
Data_Enhancement.jpg 50KB
ResNet18.jpg 31KB
ResidualBlock.jpg 19KB
Loss_Curve.jpg 37KB
Accuracy_Curve.jpg 41KB
Learning_rate.jpg 26KB
第二次大作业2019-秋.docx 134KB
Submissions
TestLabel.csv 33KB
MyNet.pkl 13.44MB
README.md 10KB
Report
Report.pdf 520KB
共 18 条
- 1
资源评论
神仙别闹
- 粉丝: 2680
- 资源: 7667
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- xlsxhandler
- 问题1 只考虑使用A类无人机,请给出公交与无人机协同配送方案,使总费用最小;要求给出具体的飞行路径及时刻表无人机.xlsx
- NCSU PDK 45nm
- E语言 CompleteUI-窗体控件美化支持库1.0版(静态版CompleteUI.fne)
- PyQt5实现PDF预览
- VMware-ESXI7.0.2镜像
- YOLOv8绘制map曲线图,采用matlab实现
- 毕业设计基于mysql+php实现的外卖点餐系统源码+答辩PPT+项目说明文档.zip
- OCPP-2.0.1 欧洲V2G开放充电协议
- 无人机自主导航-基于强化学习实现的无人机自主导航-附项目源码-优质项目实战.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功