前言
大家好,我是阿光。
本专栏整理了《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实例