目录
1 预训练网络(迁移学习)基础知识
1.1迁移学习
预训练网络又称为迁移学习,预训练网络是一个保存好的之前已在大型数据集(大规模图像分类任务)上训练好的卷积神经网络
如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以作为有效的提取视觉世界特征
的模型。
即使新问题和新任务与原始任务完全不同学习到的特征在不同问题之间是可移植的,这也是深度学习与浅层学习方法的一个重要优势。它使得深度学习对于小数据问题非常的有效。
1.2 Keras内置预训练网络
- Keras库中包含
- VGG16、VGG19、
- ResNet50、
- Inception v3、
- Xception等经典的模型架构。
1.3 ImageNet
ImageNet是一个手动标注好类别的图片数据库(为了机器视 觉研究),目前已有22,000个类别
迁移学习网络架构迁移学习的代码实现
1.3.0 VGG16与VGG19
在2014年,VGG模型架构由Simonyan和Zisserman提出, 在“极深的大规模图像识别卷积网络”(Very Deep Convolutional Networks for Large Scale Image Recognition)这篇论文中有介绍VGG模型结构简单有效,前几层仅使用3×3卷积核来增加网络深度,通过max pooling(最大池化)依次减少每层的神 经元数量,最后三层分别是2个有4096个神经元的全连接层 和一个softmax层。
但其实现在已经是落伍了,我们后面会通过实验证明,不过VGG系列与我们之前所学 非常类似所以需要分析他
1.3.1 实现原理
VGG实现的原理图:不对将图片变薄变窄
1.3.2 VGG16与VGG19对比
1.3.3 VGG有两个很大的缺点
- 网络架构weight数量相当大,很消耗磁盘空间。
- 训练非常慢
2 经典预训练网络权重分享和使用方法
这部分的学习主要是为了微调做服务的
微调
所谓微调:冻结模型库的底部的卷积层, 共同训练新添加的分类器层和顶部部分卷积层。 这允许我们“微调”基础模型中的高阶特征表示,以使它们 与特定任务更相关。
2.1 、在预训练卷积基上添加自定义层
2.2、冻结卷积基所有层
2.3、训练添加的分类层
2.4、解冻卷积基的一部分层
2.5、联合训练解冻的卷积层和添加的自定义层、
结果分析
3.1 可用的训练模型
3.2 模型介绍
3.3 Xception
# 就是不要分类器这个顶层
covn_base = keras.applications.xception.Xception(weights='imagenet',
include_top=False,
input_shape=(256,256,3),
pooling='avg')
3.4 冻结卷积层时候的训练
注意:
其实这个时候一斤非常高了,我们只是为了进行学习对比(有可能出现过拟合)
3.5 解冻Xception微调
接下来,我们继续使用之前的训练,进行微调