【第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这样的顺序一直顺延。因此代码中我用正则截取了文件名中的数字作为索引,这样就能无视读取顺序,将文件与预测值对应起来。
- 第二张图告诉我跑不了了,被现时了,只能后面再补结果了,很难受。



浙公网安备 33010602011771号