软件工程第四次作业:猫狗大战挑战赛

一、在Colab上完成迁移学习

关键步骤截图 & 想法和解读

1. 下载数据

  1. Jeremy Howard 提供了数据的下载,链接为:http://files.fast.ai/data/dogscats.zip
  2. 在他整理的数据集中,猫和狗的图片放在单独的文件夹中, 同时还提供了一个Validation数据。如果没有GPU设备,请减少用做训练的图像数据量即可。
  3. 因为这个代码需要在colab上跑,速度会相对较慢。因此,我们重新整理了数据,制作了新的数据集,训练集包含1800张图(猫的图片900张,狗的图片900张),测试集包含2000张图。下载地址为:http://fenggao-image.stor.sinaapp.com/dogscats.zip
image-20201031222323460

2. 数据处理

  1. datasets 是 torchvision 中的一个包,可以用做加载图像数据。它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。
  2. 在使用CNN处理图像时,需要进行预处理。图片将被整理成 $224\times 224 \times 3$ 的大小,同时还将进行归一化处理。torchvision 支持对输入数据进行一些复杂的预处理/变换 (normalization, cropping, flipping, jittering 等)。具体可以参照 torchvision.tranforms 的官方文档说明。
image-20201031222621166 image-20201031222743970 image-20201031222826630 image-20201031222906743

3. 创建 VGG Model

  1. torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。
  2. 以下直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。
  3. 在这部分代码中,对输入的5个图片利用VGG模型进行预测。
  4. 使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。
image-20201031223125246 image-20201031223201721

4. 修改最后一层,冻结前面层的参数

  1. 把最后的 nn.Linear 层由1000类,替换为2类,从而使用训练好的模型。
  2. 设置 required_grad=False,从而在训练中冻结前面层的参数
image-20201031223539426

5. 训练并测试全连接层

  1. 创建损失函数和优化器
  2. 训练模型
  3. 测试模型
image-20201031223727744 image-20201031223837810

6. 可视化模型预测结果(主观分析)

主观分析就是把预测的结果和相对应的测试图像输出出来看看,一般有四种方式:

随机查看一些预测正确的图片

随机查看一些预测错误的图片

预测正确,同时具有较大的probability的图片

预测错误,同时具有较大的probability的图片

最不确定的图片,比如说预测概率接近0.5的图片

image-20201031224007181

二、在AI研习社提交代码评测

下载文件并且解压:

image-20201102190618982

有把解压后的test挪到dogscats的test1文件下

加载数据

image-20201102190800998 image-20201102190826069

测试模型

image-20201102191154165

结果导入文件

image-20201102191358336

在线测评结果:

未做任何修改,将最初结果上传:
image-20201103185414879
数据处理时,图形缩放,再次进行检测:
image-20201103185325606
提高了训练次数设置为3,再次进行检测:
image-20201103185348175
调整学习率为0.0001,再次进行检测:
image-20201103185645955
更改优化器SGD->Adam,再次进行检测:
image-20201103185835221

努力进化中......

posted @ 2020-10-31 22:18  独苍  阅读(131)  评论(0编辑  收藏  举报