第四次作业:猫狗大战挑战赛
【第一部分】示例代码学习心得
这个实验使用了vgg16来完成猫狗识别,vgg整体结构由卷积层和全连接层,池化组成,要完成实验,需要掌握维度变换,数据处理,和函数的应用。
- 数据处理
定义dataset类:

创建dataloader(多线程批量加载图像的类):

- 许多模型大部分都使用imagenet数据集1000类训练,但实际上有时候这并不适用于我们自己的数据集。所以此实验就采用了与训练好的模型部分参数,进行迁移学习,对原网络进行 fine-tune 。为了能够提高速率,本实验,制作了新的数据集,其中训练集包含1800张图,测试集包含2000张图,通过此数据集对vgg16网络的最后三层全连接1层进行训练,因此,需要把最后的 nn.Linear 层由1000类,替换为2类,将最后一层全连接层输出维度改为2.

- 训练测试
使用sgd优化器,NLLLoss()损失函数

【第二部分】“猫狗大战”比赛代码练习
1.上传结果评测

由于时间关系,我们并没有优化模型,准确率为95.75%
2.代码修改部分

首先,上传测试集以便对其分类

使用unzip指令解压该测试集


加载测试集并对图像进行预处理,将图片从中心裁剪成224×224×3的大小(3代表RGB三个通道),统一图像尺寸,并且将图像按给定均值和方差做归一化处理。
模型的训练等操作和之前一样

对测试集使用训练好的模型,得到prediction等参数

将图像名称和分类结果按照要求输出为.csv文件
3.遇到的问题及解决方法
1.测试集文件报错

解决方法:在文件夹中创建一个子文件夹,将所有图片文件放进子文件夹即可
2.for循环顺序输出的结果检测正确率在50%左右

解决方法:原因是文件排序为上图所示,并非顺序输出,所以第一列输出文件名即可
3.测试集执行老师编写的部分之后出现以下情况


解决方法:忽略这个问题,因为测试集的class属性全为’0‘,如下图所示,故老师提供的检测方法不再适用。

以下就是一名组员的出错经历以及感想

4.分析使用哪些技术可以进一步提高分类准确率
可采用数据增强技术如:翻转、旋转、缩放比例、移位、裁剪等生成规模更大的样本。
浙公网安备 33010602011771号