背景
通过之前的数据增强+直接训练,我们将正确率提高到了八十以上,但是还有一种更好的方法去帮助我们训练,那就是使用预训练网络,原理就是前人栽树,后人乘凉,假定之前有人用了超多的数据进行训练,实现了多分类的识别,其中包括了我们本次要识别的东西,或者和我们识别的东西有相似特征的东西,这样我们就可以利用其训练的模型运用到自己的模型中。
首先介绍一下卷积神经网络,它主要包括两个部分,第一部分是卷积基,包括卷积层和池化层,第二个部分就是密集连接分类器,特征提取就是取出训练好的卷积基,在上边增加新的密集连接分类器,示意图如下:
准备文件
准备好训练集和验证集的图片,分别为2000张和1000张,倒是没有硬性要求,主要是为了学习,用的多就有点浪费时间了(原数据集有几万张)
进行预测数据,并保存
这个部分将用VGG16去训练我们的数据,指定没有分类器,最后我们将得到的数据进行储存,具体细节我写了注释,应该都能看懂
from keras.applications import 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 = 'F:\DeepLearn\cat_and_dog'
train_dir = os.path.join(base_dir,'tr