五种卷积神经网络解决猫狗分类问题(零):总概要

五种卷积神经网络解决猫狗分类问题(零):总概要
五种卷积神经网络解决猫狗分类问题(一):V1 简单线性网络
五种卷积神经网络解决猫狗分类问题(二):V2 简单线性网络上添加数据增强和dropout层
五种卷积神经网络解决猫狗分类问题(三):V3 预训练-特征提取-分步式
五种卷积神经网络解决猫狗分类问题(四):V4 预训练-特征提取-合并式
五种卷积神经网络解决猫狗分类问题(五):V5 预训练-微调模型

1. 介绍

在《python深度学习》(弗朗索瓦·肖莱著)这本书中,针对猫狗分类问题,使用kaggle上的猫狗分类数据集的部分数据,作者使用五种卷积神经网络(使用相同的数据集训练和测试)方法来提高网络精度,在这里我使用V1~V5来表示(因为随着版本更新,精度也在不断增加):

版本描述epochs训练精度验证精度
V1.0简单线性卷积神经网络10099%75%
V2.0添加了数据增强和dropout层10083%83%
V3.0使用预训练-特征提取-分步式10099%90%
V4.0使用预训练-特征提取-合并式10090%90%
V5.0使用预训练-微调模型10099%94%

我会针对每个版本都做详细介绍和给出代码,在这里我先对每个版本和使用的方法做个统一介绍,能有个大致了解

2. 使用的数据集

kaggle的猫狗数据集:包含25000张图像(每类别有12500张),但是我们只用一部分图像(共4000张,每类2000张):

猫:
    训练集:1000张(0~1000张)
    验证集:500张(1000~1500张)
    测试集:500张(1500~2000张)
狗
    训练集:1000张
    验证集:500张
    测试集:500张

文件夹结构:

--dogs-vs-cats_small
  --train
        --cats
        --dogs
  --validation
        --cats
        --dogs
  --test
        --cats
        --dogs

3. 对于V1版本

V1版本中作者使用keras搭建了一个简单线性卷积神经网络,网络summary如下:
在这里插入图片描述

4. 对于V2版本

V2版本是在V1版本上增加了数据增强和添加了dropout层(网络其他层不变),数据增强使用了keras中的ImageDataGenerator来处理,dropout层则添加在V1网络模型的最后两个Dense层之前,其网络summary如下:
在这里插入图片描述

5. 对于V3版本

在这一步起,抛弃了V1和V2中自定义网络的方式,改用在ImageNet上训练的VGG16预训练模型和自定义的分类器(即最后两层密集层)。当然预训练方式也有很多,预训练模式包括特征提取和微调模型两种方法,特征提取又分为分步式和合并式:

  • 1.特征提取
    • 1.1卷积基和分类器分步式
    • 1.2卷积基和分类器合并式
  • 2.微调模型

图像分类的卷积神经网络包括两部分:首先是一系列池化层和卷积层(称为卷积基),后是两个密集连接层(称为分类器)

特征提取可以简单理解为预训练网络中的多个卷积层(特征提取的工作主要由卷积层完成),所以特征提取的方法主要是利用预训练网络的卷积层(称为卷积基)。卷积基包括了预训练的卷积层,也包括其他比如pooling层。预训练网络VGG16的卷积基如下:在这里插入图片描述
而分类器则是指密集连接层,对于不同需要,网络的输出可能需要定义成不同的格式,所以分类器一般我们自己定义,如上图我们只用到VGG16的卷积基,没有用分类器,分类器我们自己定义。

如图,从图中我们可以介绍特征提取的两种方法:分步式和合并式

  • 分步式:(图三)我们将数据输入预训练的卷积基,得到卷积基的输出,再将卷积基的输出作为新分类器的输入,对新分类器进行训练。可以理解的是,对于卷积基我们只进行了前向运算,而对于新分类器则进行了训练,所以计算代价比较小(毕竟训练的大头再卷积基,而我们这里不需要训练卷积基,只需要前向运算)
  • 合并式:(图三)我们将数据输入整个网络(卷积基+新分类器),而不再像分步式保存中间结果。对整个网络经行训练,只不过在反向传播更新权值时只更新新分类器,而不更新卷积基。
    在这里插入图片描述

V3版本预训练-特征提取-分步式详见:五种卷积神经网络解决猫狗分类问题(三):预训练-特征提取-分步式

6. 对于V4版本

V4采用预训练-特征提取-合并式:
可以使用数据增强,但是计算代价大

7. 对于V5版本

V5采用微调模型,所谓的微调模型,是指按预训练-特征提取-合并式训练好的网络(冻结了整个卷积基,只训练了分类器),我们再次训练,只不过现在我们解冻卷积基的后面几层卷积层,并调低学习率(使得权值更新时波动较小)。

我们做个比较:
V4:“卷积基-分类器”:只训练分类器,也就是只更新分类器的权值
V5:“卷积基(前部分)-卷积基(后部分)-分类器”:只训练卷积基(后部分)和分类器(并且学习率更小,否则怎么叫微调)

为什么要微调?类似显微镜先粗调找到细菌范围,再细调调节清楚。对于V5先使用预训练-特征提取-合并式训练粗调(虽然精度也可以,但是细调后精度更高),再使用微调模型方法细调,所以学习率更小,使得权重小范围更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是一个对称矩阵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值