【第4次作业】CNN实战

使用VGG模型进行猫狗大战

导入相关的包

下载数据并解压

数据处理

  • datasets 是 torchvision 中的一个包,可以用做加载图像数据。它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。在使用CNN处理图像时,需要进行预处理。图片将被整理成 $224\times 224\times 3$ 的大小,同时还将进行归一化处理。

创建 VGG Model

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

  • 在本课程中,我们直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。

  • 在这部分代码中,对输入的5个图片利用VGG模型进行预测,同时,使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。

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

  • 为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。

训练并测试全连接层

  • 包括三个步骤:第1步,创建损失函数和优化器;第2步,训练模型;第3步,测试模型。

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

分析

从问题的数据的准备,到下载预训练好的网络,通过对网络的修改和训练,得到自己的模型,感受了一次较为完整的练习。

利用fine-tune的VGG模型进行测试-猫狗大赛

1.数据下载并解压

2.数据处理

这里把cat_dog 文件进行了整理,如果不整理无法放到网络中去训练

3.模型训练

这里对学习率和epochs进行了了解,训练模型并保存到model中。

  • 学习率会影响模型损失函数的变化,若学习率过大,可能会使损失函数直接越过全局最优点,学习率如果过小,损失函数的变化速度很慢,会大大增加网络的收敛复杂度,并且很容易被困在局部最小值或者鞍点。

  • epoch 当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次。随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。

4.测试模型

  • 选取一个刚刚保存下来的模型,导入测试数据集进行测试:

  • 测试结果

5.处理未分类过的待测试数据并提交到练习赛

  • 文件读取顺序并不是按0.jpg,1.jpg一直顺延这样的顺序,实际上的顺序是0.jpg,10.jpg,11.jpg这样的顺序一直顺延。因此代码中我用正则截取了文件名中的数字作为索引,这样就能无视读取顺序,将文件与预测值对应起来。
  • 第二张图告诉我跑不了了,被现时了,只能后面再补结果了,很难受。

posted @ 2021-10-24 18:29  zhy330  阅读(85)  评论(0)    收藏  举报