CNN实战:猫狗大战

本文介绍了使用VGG模型进行猫狗图片识别的迁移学习过程,包括数据预处理、模型创建、训练与测试,最终达到96.85%的准确率。此外,还探讨了与传统CNN实战的区别,如数据标注、模型调整和测试结果的可视化。在实际操作中遇到了数据加载和模型参数调整的挑战,强调了深度学习中加速训练和理解模型结构的重要性。
摘要由CSDN通过智能技术生成

1.猫狗大战VGG模型迁移学习

下载数据
猫和狗的图片放在单独的文件夹中。
在这里插入图片描述
数据处理
对图片进行预处理
在这里插入图片描述
在这里插入图片描述
创建VGG Model
使用预训练好的VGG Model,并对 输入的5张图片进行识别
在这里插入图片描述
可以看出,识别结果较为准确,这5张图片均正确。

修改最后一层,冻结之前的参数
为了使用预训练好的模型,结合本问题特征,需将nn.linear最后一层的参数改为2,即为2类(cat & dog),同时冻结前面的参数,这样在反向传播时只会更新最后一层的参数,不影响预训练结果。在这里插入图片描述
训练并测试全连接层
在这里插入图片描述
在这里插入图片描述
准确率很高,达到了96.85%。

可视化模型预测结果
进行随机检测,0代表cat,1代表dog。
将correct的部分进行随机显示,进一步检验模型准确性。

2.CNN实战

迁移学习的不同之处

将数据进行标注

与原作业相比,https://god.yanxishe.com/41 中给出的数据集都是未进行标注的。参考上文中的代码,首先要将给出的数据集中train,val中的cat和dog部分分离,通过python代码实现
在这里插入图片描述
test部分类似,为便于后续ImageFolder读取,可以生成一个raw文件夹存放原图片集。

生成csv

与此前通过valid数据集进行验证不同,题目要求的是根据test文件生成对应的分类结果

def test_model1(device,dataloader):
  model_vgg_new.eval()

  total_preds= []
  indexs = []
  for i, (inputs,classes)in enumerate(dataloader):
    inputs = inputs.to(device)
    outputs = model_vgg_new(inputs)
    _, preds = torch.max(outputs.data, 1)
    sample_fname, _ = dataloader.dataset.samples[i]
    index = os.path.split(sample_fname)[1].split('.')[0]
    indexs.apend(int(index))

    total_preds.append(preds.item())

  dictionary = dict(zip(indexs, total_preds))
  dictionary = sorted(dictionary.items(),key = lambda item:item[0])
  dictionary = dict(dictionary)
  with open("./result.csv",'w') as f:
    for k,v in dictionary.items():
      f.write("{},{}\n".format(k,v)) 

loader_test = torch.utils.data.DataLoader(dsets['test'],batch_size=1,shuffle=False,num_workers=0)

test_model1(device, loader_test)

提交结果截图

在这里插入图片描述

感想

训练的时候虽然用的是预训练模型,但实际训练的时间还是比我想的长。之前的练习使用的数据量比较小,网络结果也比较简单,所以训练得快,但在实际应用中大量数据和较深的网络模型是常见的,所以如何加速模型训练十分重要。在自己写代码的时候,主要碰到两个问题:1. 对如何加载数据不熟悉,我现在才知道使用dataset加载数据,数据集中的数据与文件夹内文件的顺序并不相同,而是以类似于将文件名视为字符串进行排序。当然了,这很合理。2. 不知道该如何调整预训练模型的参数,我是看了别人写的博客才知道该怎么调的。深度学习涉及到的理论非常多,想要把技术问题从头到尾弄明白还是挺难的。有的时候会使用一个模型来解决问题,可对于模型的架构、数据的处理还是缺少理解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqqqqq017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值