25.迁移学习

本文介绍了如何利用预训练的VGG16网络进行图像分类。首先,我们讨论了预训练网络的概念及其在减少模型初始化随机性的优势。接着,详细展示了在Keras中加载和使用VGG16的步骤,包括制作数据集、构建模型、编译模型、训练模型以及预测。在训练过程中,我们注意到模型仅经过少量迭代就能达到较高的准确率。最后,我们还探讨了如何调整模型以适应特定的二分类任务,并解释了如何保存和使用训练好的模型。
摘要由CSDN通过智能技术生成

目录

1 预训练网络

2  代码实现

2.1  制作数据集

2.2  建立模型

2.3  编译模型

2.4  训练模型

2.5  预测模型


1 预训练网络

我们之前每次创建模型,模型自我的第一步都是初始化自己的参数,初始化的参数都是随机的,如果我们使用预训练网络,我们初始化的参数就是之前已经训练好的神经网络

keras中包含VGG16,VGG19,ResNet50,Inception v3,Xception等网络

下面这个图是VGG的六种网络结构

  • VGG16中16的意思是网络中可训练参数层(不算池化层与输出层)共有16层,VGG19中19的意思是网络中共有19层
  • FC 是指Dense层,后面的数值是该层的神经元个数,FC-4096就是4096个神经元的dense层
  • VGG 有两个大的缺点,第一是消耗磁盘空间大,第二是训练速度慢

2  代码实现

2.1  制作数据集

我们使用上一章的猫狗分类添加VGG,我们沿用创建数据集前的所有代码,我们简单看一下

2.2  建立模型

之后调用VGG网络

我们首先点进keras.applications中看一下

发现其中有很多网络,此时我们用的网络为vgg16,之后我们再看VGG16的参数

我们这里首先使用到了weights,这个参数为是否使用VGG16的权重,如果使用我们就输入'imagenet',如果不使用,我们就输入None,第一次运行的时候权重会自动从网络上下载

这一步有可能下载失败,除了多尝试几次,我们还可以通过其他渠道先把模型下载好,之后放在 用户目录下的.keras\models中,我当前是C:\Users\MSI.keras\models,下面这两个文件是我运行代码自动下载下来的文件

nclude_top为是否使用最后的全链接层(就是上面提到的FC-4096这些),如果使用我们就输入True,如果不使用我们就输入False,这个就得看情况,如果是我们应用场景是日常的一些事物,且种类很多,这个我们最好是使用它原来的全连接层,当前我们是做猫狗二分类,所以我们这里输入False

我们称没有全连接层的神经网络为卷积基,这个也是我们变量名称conv_base的含义,卷积基本身就为一个神经网络,我们可以看一下它的summary()

之后我们在卷积基的基础上建立神经网络

  • GlobalAveragePooling2D()在这里与之前的例子中我们可以理解为加强版的Flatten()

我们看一下这个模型

由于我们继承了VGG的权重,之后进行的训练实际上我们希望仅对Dense层训练,所以我们要将卷积基置为不可训练状态

我们现在再看一下这个模型

发现可训练参数比起之前少了许多

2.3  编译模型

2.4  训练模型

我们看一下曲线

  • acc

  • loss

我们可以看到训练仅进行15次,正确率就可达到80%以上,且仍然有上升趋势,从图像上来看,我们的结果是有一点儿欠拟合,我们可以增加epoch,这样训练的acc与loss应该会有改观

之后我们保存模型

2.5  预测模型

然后我们对模型进行预测,我们使用这两张图像进行预测

我们训练时的输出层是有sigmoid的,所以在这里我们使用0.5作为阈值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Suyuoa

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

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

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

打赏作者

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

抵扣说明:

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

余额充值