2022秋中国海洋大学《软件工程》第14小组第四次作业
本博客为OUC2022秋季软件工程第三次作业
文章目录
李昊
1.下载数据:
2.数据处理:
3.创建 VGG Model
4. 修改最后一层,冻结前面层的参数
5. 训练并测试全连接层
陈子琪
前言
我们将建一个模型来完成 Kaggle 中的猫狗大战竞赛题目。在这个比赛中,有25000张标记好的猫和狗的图片用做训练,有12500张图片用做测试。首先在谷歌 Colab 上完成猫狗大战VGG模型的迁移学习,关键步骤截图,并附一些自己想法和解读。
在该代码的基础上,下载AI研习社“猫狗大战”比赛的测试集,利用fine-tune的VGG模型进行测试,按照比赛规定的格式输出,上传结果在线评测。将在线评测结果截图,将代码实现的解读发在博客。同时,分析使用哪些技术可以进一步提高分类准确率。
第一部分 在谷歌 Colab 上完成猫狗大战VGG模型的迁移学习
- 检查是否有GPU
- 下载数据
下载数据并解压到工作目录
- 数据处理
然后使用datasets.ImageFolder加载数据,把训练集和验证集分别加载并使用transforms进行处理,最后放到一个字典里。并且获取数据集大小和训练集的类别
- 创建 VGG Model
torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。
在本课程中,我们直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。
在这部分代码中,对输入的5个图片利用VGG模型进行预测,同时,使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。
- 修改最后一层,冻结前面层的参数
我们的目标是使用预训练好的模型,因此,需要把最后的 nn.Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。
把原网络的分类器的第六层改为nn.Linear(4096, 2)
- 可视化模型预测结果(主观分析)
主观分析就是把预测的结果和相对应的测试图像输出出来看看,一般有五种方式:
随机查看一些预测正确的图片
随机查看一些预测错误的图片
预测正确,同时具有较大的pr