用Keras进行猫狗识别(四)

本文介绍了如何利用Keras进行猫狗识别的实践,通过微调预训练的VGG16模型,解冻最后几层并联合训练自定义全连接层,以提升模型的识别准确率。详细步骤包括数据准备、模型构建、训练过程,并给出了关键代码段和训练结果的分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用数据增强+特征提取+微调模型来训练模型

背景

  在上一篇文章我们引用了VGG16模型,通过删除其全连接层,再加上自己的全连接层进行训练,达到了90%的正确率。但是还有一种方法,就是微调模型,这个方法配合特征提取可以达到一个更好的高度。

  什么是微调模型呢?就是通过解冻VGG16最后的几层,通过与训练好的全连接层联合训练的方式,来达到我们的目的,也就是对已经训练好的网络进行微调。
  为什么只解冻后边几层呢?如果了解过卷积神经网络的话,我们可以知道,网络越是靠后,它提取出来的特征越是笼统,越是靠前,它提取的特征越散,总结来说修改哪里其实都是能提高正确率的,但是,修改前边的网络性价比很低,相比于修改后边的网络,效果不是那么显著,而且我觉得牵一发而动全身,前边的网络都改了后边的怎么能不改呢。

数据准备

猫狗识别的数据,kaggle比赛
训练集2000张
验证集1000张

步骤

  1. 在已经训练好的网络上添加自定义网络。(特征提取)
  2. 冻结基网络
  3. 训练所添加的部分
  4. 解冻基网络的一些层
  5. 联合训练解冻的这些层和添加的部分

在猫狗识别(三)中,我们实现了前三个步骤,使用VGG16网络+自己写一个全连接层,冻结VGG16网络后进行训练,训练好后将VGG16的卷积块5解冻,调小学习率,再进行训练。

代码

代码的改动不多,主要分为下边几个部分:

卷积块5的解冻:

conv_base.trainable = True

set_trainable = False
for layer in conv_base.layers:
    if layer.name == 'block5_conv1':
        set_trainable = True
    if set_trainable =
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值