【PyTorch深度学习项目实战100例】—— 基于ResNet18实现昆虫分类任务 | 第23例

560 阅读3分钟

前言

大家好,我是阿光。

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

正在更新中~ ✨

🚨 我的项目环境:

  • 平台:Windows10
  • 语言环境:python3.7
  • 编译器:PyCharm
  • PyTorch版本:1.8.1

💥 项目专栏:【PyTorch深度学习项目实战100例】


一、基于ResNet18实现昆虫分类任务

本项目在研究昆虫图像分类过程中,借助人工智能算法的优势,开展基于深度神经网络的图像分类实验。借助ResNet-18模型进行迁移学习,经迭代10次后分类准确率达到94.26% 。

在这里插入图片描述

在这里插入图片描述

二、数据集介绍

「本案例使用的数据集是一个昆虫分类的数据集,包含蚂蚁和蜜蜂两类样本。」

数据集划分为训练集和验证集:

  • 训练集位于datasets/train/ 目录下,两类的图片分别位于ants和bees目录下
  • 验证 集位于datasets/val/ 目录下,两类的图片分别位于ants和bees目录下

「蚂蚁类别:」

在这里插入图片描述

在这里插入图片描述

蜜蜂类别:

在这里插入图片描述

在这里插入图片描述

三、ResNet模型

在这里插入图片描述 ResNet的作者何恺明也因此摘得CVPR2016最佳论文奖,当然何博士的成就远不止于此,感兴趣的可以去搜一下他后来的辉煌战绩。那么ResNet为什么会有如此优异的表现呢?其实ResNet是解决了深度CNN模型难训练的问题,从图2中可以看到14年的VGG才19层,而15年的ResNet多达152层,这在网络深度完全不是一个量级上,所以如果是第一眼看这个图的话,肯定会觉得ResNet是靠深度取胜。事实当然是这样,但是ResNet还有架构上的trick,这才使得网络的深度发挥出作用,这个trick就是残差学习(Residual learning)。

在这里插入图片描述

在这里插入图片描述

四、加载预训练模型

这里我们加载pytorch中已经训练好的resnet模型,需要一定时间下载训练好的模型权重。

由于预训练的模型与我们的任务需要不一样,所以需要我们将要修改最后一层的全连接层,将输出维度修改为我们的任务要求中的二分类。

但是需要注意需要冻结其它层的参数,防止训练过程中将其进行改动,然后进行训练微调最后一层即可。

# 5.加载resnet模型
model = torchvision.models.resnet18(pretrained=True# 加载预训练好的resnet模型

# 冻结模型参数
for param in model.parameters():
    param.requires_grad = False
    
# 修改最后一层的全连接层
model.fc = nn.Linear(model.fc.in_features, 2)

# 将模型加载到cpu中
model = model.to('cpu')

criterion = nn.CrossEntropyLoss() # 损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=0.01# 优化器

五、训练过程

train epoch[1/10] loss:0.353: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.20s/it] 【EPOCH: 】1 训练损失为3.9144469499588013 训练精度为72.13% train epoch[2/10] loss:0.220: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.16s/it] 【EPOCH: 】2 训练损失为3.8999281227588654 训练精度为78.68% train epoch[3/10] loss:1.024: 100%|██████████████████████████████████████████████████████| 8/8 [00:10<00:00, 1.27s/it] 【EPOCH: 】3 训练损失为3.2651842683553696 训练精度为86.06% train epoch[4/10] loss:0.370: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.20s/it] 【EPOCH: 】4 训练损失为1.8155063688755035 训练精度为91.39% train epoch[5/10] loss:0.238: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.18s/it] 【EPOCH: 】5 训练损失为1.3415270671248436 训练精度为95.08% train epoch[6/10] loss:0.064: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.19s/it] 【EPOCH: 】6 训练损失为1.8057209178805351 训练精度为91.80% train epoch[7/10] loss:0.110: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.21s/it] 【EPOCH: 】7 训练损失为1.5264176055788994 训练精度为93.44% train epoch[8/10] loss:0.051: 100%|██████████████████████████████████████████████████████| 8/8 [00:09<00:00, 1.23s/it] 【EPOCH: 】8 训练损失为1.5405088663101196 训练精度为92.21% train epoch[9/10] loss:0.017: 100%|██████████████████████████████████████████████████████| 8/8 [00:10<00:00, 1.29s/it] 【EPOCH: 】9 训练损失为1.1786243692040443 训练精度为94.67% train epoch[10/10] loss:0.625: 100%|█████████████████████████████████████████████████████| 8/8 [00:10<00:00, 1.35s/it] 【EPOCH: 】10 训练损失为1.5480362623929977 训练精度为94.26% Finished Training

完整源码

【PyTorch深度学习项目实战100例】—— 基于ResNet18实现昆虫分类任务 | 第23例_Bi 8 Bo的博客-CSDN博客_pytorch resnet实例