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

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

第一部分谷歌 Colab 上完成猫狗大战VGG模型的迁移学习

image

对图像归一化进行处理

然后在图像中间进行裁剪

进行灰度 在对图像进行归一化处理 不知道这个参数是怎么来的 前面用过 mean=(0.5 0.5 0.5)std=(0.5,0.5,0.5)刚好讲最大值和最小值放缩到(-1,1)

image

按照之前定义的vgg_format形式读取数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-733MzEsS-1666103871080)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017135906884.png)]

制作训练集和测试集

训练集 一个batch是64 打乱顺序可以提高准确率

测试集一个batch是5 测试的时候可以按顺序

多线程来加速

image

loader_valid一共2000张 一个batch是5所以进行400轮

image

可以看到这个图片的标签 和这个图片的大小 数量

因为之前截取的是中间的224 所以是两个224 然后一组有5个

image

这里定义了一个展示图片的小程序

image

讲第一组batch组合成为一张图片并且输出 图片和label

image

这次实验是直接用了训练好的vgg模型

对于我们上一步展示的图片进行预测

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RgRzn6Dk-1666103871082)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017162239305.png)]

打印结果看一下

发现最后的结果是5*1000的矩阵

这里是神经网络训练的比较强大 有1000个类别

这里只需辨别是猫还是狗

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UoE3ijuI-1666103871082)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017162621985.png)]

上一轮结果很难懂是什么意思

但我们做分类问题 将函数归一化

dim=1 按行处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkEqvVud-1666103871082)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017164119783.png)]

这里归一化的总和是1

打印训练的最大概率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-beUT34US-1666103871083)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017164222961.png)]

最后的结果和标签检查 发现正确率很好

image

打印一下这个神经网络

特征提取的参数不需要修改

修改一下分类的函数

之前是分成1000类

现在只需要分成两类

因为用的这个模型 最后分类比较多 所以我们让最后一个全连接层的为2,我们只需要区分猫和狗就行

image-20221017173914251

image-20221017174220332

修改后和修改前

image-20221017174629003

损失函数和学习率 一般都是定义好的 学习率一般都是0.001

采用梯度下降的方法

image-20221017174725754

定义这个训练函数

传入定义好的模型 数据 数据大小 epochs 和优化函数

开始训练

将标签和输入传入

得到输出结果

这里好像没有用损失函数 不知道直接调用这个criterion是默认的损失函数吗

然后是优化函数

先将梯度归零 optimizer.zero_grad()

然后反向传播计算得到每个参数的梯度值loss.backward()

最后通过梯度下降执行一步参数更新optimizer.step()

传统的学习方式

image-20221017184805294

得到预测最大可能性的下标

因为只有0和1

image-20221017184805294

统计数据计算失误率和准确率

image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shkXofnK-1666103871085)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017184947262.png)]

开始训练

image

定义测试函数 和之前的差别不大

image

image

这里展示了一下测试的结果

将8张图片制作成一张然后输出

第二部分

image

下载数据指定目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTTAhH6n-1666103871086)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221017201225516.png)]

解压

发现colab好像没有装解压rar的工具 下载一下就好

image

开始制作lader数据集

我们发现image

这里的数据结构不能直接调用datasets.ImageFolder 这个封装好的函数

所以我们现在有两种办法 一是将文件目录结构改为官方接口的形式

二是自己重写dataset函数

我选择的第一种 比较简单的一个选择分类

import os
import shutil

pathlist=os.listdir('/content/data/cat_dog/train')


for x in pathlist:
  res=x[:3]
  dir='/content/data/cat_dog/train'
  if res=="cat" :
    shutil.move(os.path.join(dir, x),'/content/data/cat_dog/train/cats')
  else  : 
    shutil.move(os.path.join(dir, x),'/content/data/cat_dog/train/dogs')

这里是一个简单的分类 将文件是cat的放入cats文件夹

是dog放入dogs文件夹

image

image

对文件做好分类我们就开始制作数据集

image

可以打印一些结果康康

image

我们可以看出 64一个batch 224*224

image

打出一个batch看一下

用vgg模型修改训练的输出层获得结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgrxvdHs-1666103871088)(C:\Users\zzf\AppData\Roaming\Typora\typora-user-images\image-20221018143525718.png)]

虽然很不理解 训练的数据多了 为什么结果还没之前的优秀

接下来我们对测试集进行训练

image

这里就无所谓标签了

我们对数据进行简单dataset 用的还是之前的接口

image

我们对图片进行预测

得到结果

我们要输出一个csv

然后字典序就是 0 1 10 100 这样的顺序

image-20221018222520236

我们可以看看dataloder里面的数据排序

然后做一个和里面顺序一样的一个list

两个list zip()打包一下

image

用pands里面的dataframe做一个dataframe

image

可以看一下结果

然后将这个数据输出

image

不带索引 不带序号的输出

然后就可以提交了

image

然后我就提交了 莫名的得到了这个分数

后来我仔细的看了一下输出的顺序

答案要求的好像是从0-1999

我这里因为之前用的是str类型

所以排序就是0 1 10 100

这样得顺序

本来应该转换成int在排序一遍

涂了个省事

我直接用excel打开csv

然后手动排序

image

排完大概是这样.

然后在提交

image

最后得到了结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值