预训练网络:之前在大型数据集上训练好,保存好的网络。如果原始数据集足够大,足够通用,则预训练网络学到特征的空间层次结构可以有效的作为通用模型。
使用预训练网络的两种方法:
- 特征提取:对于卷积神经网络而言,特征提取就是取出之前训练好网络的卷积基(池化层和卷积层部分)。这部分学到的表示更加通用,更适合重复使用。
卷积层提取表示的通用性取决于层中模型的深度,更靠近底部的是局部的高度通用的特征图,靠近顶部的是更加抽象的概念。
在添加密集连接分类器时,有两种添加方式:
1)先运行数据,将输出结果转为Numpy数组输入密集连接分类器。无法使用数据增强。
2)直接为提取的卷积基添加添加密集连接分类器,再在完整的网络上训练。代价高,但可以设置数据增强。
from keras.applications import VGG16
#卷积基VGG16实例化
#参数(模型初始化的权重检查点,是否包含密集连接分类器,输入到网络中张量的形状(可选))
conv_base = VGG16(weights='imagenet',include_top=False,input_shape=(150,150,3))
#使用预训练的卷积基提取特征
import os
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
#此处对应笔记(三)中存放复制猫狗数据的根文件路径
base_dir='D:\\jupyter_code\\kaggle\\train1'
train_dir=os.path.join(base_dir,'train')
validation_dir=os.path.join(base_dir,'validation')
test_dir=os.path.join(base_dir,'test')
datagen=Image