软件工程第四次作业:猫狗大战挑战赛
一、在Colab上完成迁移学习
关键步骤截图 & 想法和解读
1. 下载数据
- Jeremy Howard 提供了数据的下载,链接为:http://files.fast.ai/data/dogscats.zip
- 在他整理的数据集中,猫和狗的图片放在单独的文件夹中, 同时还提供了一个Validation数据。如果没有GPU设备,请减少用做训练的图像数据量即可。
- 因为这个代码需要在colab上跑,速度会相对较慢。因此,我们重新整理了数据,制作了新的数据集,训练集包含1800张图(猫的图片900张,狗的图片900张),测试集包含2000张图。下载地址为:http://fenggao-image.stor.sinaapp.com/dogscats.zip
2. 数据处理
- datasets 是 torchvision 中的一个包,可以用做加载图像数据。它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。
- 在使用CNN处理图像时,需要进行预处理。图片将被整理成 的大小,同时还将进行归一化处理。torchvision 支持对输入数据进行一些复杂的预处理/变换 (normalization, cropping, flipping, jittering 等)。具体可以参照 torchvision.tranforms 的官方文档说明。
3. 创建 VGG Model
- torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。
- 以下直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。
- 在这部分代码中,对输入的5个图片利用VGG模型进行预测。
- 使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。
4. 修改最后一层,冻结前面层的参数
- 把最后的 nn.Linear 层由1000类,替换为2类,从而使用训练好的模型。
- 设置 required_grad=False,从而在训练中冻结前面层的参数
5. 训练并测试全连接层
- 创建损失函数和优化器
- 训练模型
- 测试模型
6. 可视化模型预测结果(主观分析)
主观分析就是把预测的结果和相对应的测试图像输出出来看看,一般有四种方式:
随机查看一些预测正确的图片
随机查看一些预测错误的图片
预测正确,同时具有较大的probability的图片
预测错误,同时具有较大的probability的图片
最不确定的图片,比如说预测概率接近0.5的图片
二、在AI研习社提交代码评测
下载文件并且解压:
有把解压后的test挪到dogscats的test1文件下
加载数据
测试模型
结果导入文件
在线测评结果:
未做任何修改,将最初结果上传: |
---|
数据处理时,图形缩放,再次进行检测: |
提高了训练次数设置为3,再次进行检测: |
调整学习率为0.0001,再次进行检测: |
更改优化器SGD->Adam,再次进行检测: |
努力进化中......