现实中,存在一些深度学习任务,某些样本的数据集样本量较少,面对这样的情况,我们该怎么做呢?
通常有如下几种方式:
1数据增强,通过图像裁剪,水平翻转等方式丰富有限的样本集。
2使用在大规模多种类数据集上训练好的AI模型,例如VGG16,
ResNet,作为预训练模型,使得小样本集在通用的特征提取器运作。
3由于数据集较少,在构建训练模型时,可以加入Dropout层,避免
样本局限带来的过拟合问题。
4在测试数据集上,进行数据匹配获取更多维度特征,填充标
签,丰富测试数据集质量,迭代引擎规则+预训练模型
训练新分类器后的分类模型。
在使用预训练模型时,请注意如下:
预训练模型的某个卷积层的通用性(以及可复用性)取决于该层在模型中的深度。模型中更靠近底部的层提取的是局部的、高度通用的特征图(比如视觉边缘、颜色和纹理),近顶部层则是越接近任务指向型的更加宏观整体的特定分类(比如识别“猫耳朵”或“狗眼睛”)。 因此,如果你的新数据集与原始模型训练的数据集有很大差异,那么最好只使用模型的前几层来做特征提取,而不是使用整个卷积基。
预训练模型的选择:
基于ImageNet 数据集上预训练得到的深度学习模型,以下都可以参考作为我们今天的预训练模型:
Xception
Inception V3
ResNet50
VGG16
VGG19
以上模型都是内置于keras.applications 中的图像分类模型,使用时只要调用keras相应模块。
下面以使用VGG16作为预训练模型,在小样本集上训练猫狗分类任务为实战,代码如下:
首先实例化一个VGG16模型出来,由于VGG16 也内置于 Keras 中,我们从 keras.applications类 模块中导入,然后进行实例
from keras.applications import VGG16
conv_base = VGG16(weights='imagenet',
include_top=False,
input_shape=(150, 150, 3))
阅读(1020) | 评论(0) | 转发(0) |