摘要
VGG 16网络在一些复杂的目标检测网络里会把它的卷积层拿出来做特征提取,所以本文主要聊聊VGG 16网络组成;使用keras复现vgg16;使用keras的已封装的vgg16做微调(使用已训练的卷基层,只训练全连接层)。
VGG 16组成
vgg16是vgg网络家族中的一员,也是使用较多的一种,网络深度有16层,与以前接触的CNN网络差不多,论文中说vgg网络特点是深度较深,使用3*3卷集核,第一个全连接层使用与输入相同尺寸的卷集核取代传统全连接方式以达到降低参数的目的。详细内容参看论文。
论文原文:https://arxiv.org/pdf/1409.1556.pdf
论文翻译对照:https://blog.csdn.net/weixin_42546496/article/details/87914338
keras实现VGG16网络
这里数据集我使用的是kaggle中猫狗大战的数据集,网上可以查得到,这里就不提供了,你也可以用其他的数据集来取代,把num_classes改为需要的类别数。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 23 11:23:12 2019
@author: sb
"""
#import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers.pooling import GlobalAveragePooling2D
from keras.layers import Dense,Conv2D,MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
#from keras import backend as K
num_classes = 2
img_rows,img_cols = 224,224
batch_size = 64
input_shape = (img_rows,img_cols,3)
datagen=ImageDataGenerator() #也可以做数据增广
train_generator = datagen.flow_from_directory(
'./training_set',
target_size=(224, 224),
class_mode='categorical',
batch_si