第4次作业:CNN实战

第4次作业:CNN实战

一.在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×224×3的大小,同时还将进行归一化处理。torchvision 支持对输入数据进行一些复杂的预处理/变换 (normalization, cropping, flipping, jittering 等)。具体可以参照 torchvision.tranforms 的官方文档说明。

image-20201031222621166

image-20201031222743970

3. 创建 VGG Model

  1. torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。

  2. 以下直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。

  3. 在这部分代码中,对输入的5个图片利用VGG模型进行预测。

  4. 使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。

    image-20201031223201721

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

  1. 把最后的 nn.Linear 层由1000类,替换为2类,从而使用训练好的模型。

  2. 设置 required_grad=False,从而在训练中冻结前面层的参数

    image-20201031223539426

5. 训练并测试全连接层

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

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

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

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

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

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

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

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

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

CNN实战的曲折之路

1.下载评测文件(在这里想说一句第12小组的博客的下载文件教程非常详细,膜拜大佬)

image-20201102190618982

2.把解压后的test挪到dogscats的test1文件下,文件层次结构应该是dogscats/test/test1

3.加载数据

image-20201102190800998

image-20201102190826069

4.测试模型

image-20201102191154165

5.结果导入文件

​ 这一步在实验时我们组同学遇到了困难,后来查询资料又向其他同学请教,最终得以解决。

image-20201102191358336

​ 最后导出的文件不是排序好的,我们没能在代码上实现对它排序,而是在打开后的Excel表格上进行了一下排序,以下是排序后的结果

6.提交评测结果

我们组最先做出来的是姚博涵同学,结果是95.05%。
后来,又进行了测试,发现准确率又有所提升,达到96.95%,应该是训练具有不确定性。

我们在找到一些优化方法后,不断优化,最终达到98.9%的准确率,以下是整个提交过程结果

热爱学习,不断改进~

posted @ 2020-11-03 17:52  瓦菲  阅读(212)  评论(0)    收藏  举报