VGG16模型,顾名思义,有16层,通过学习github上的源码,发现其中有13层为卷积层(conv),3层为全连接(Dense),还有若干层pooling层。
使用keras建立一个模型的instance有两种方式,一个是通过Input类构建,一个则是通过model类构建,具体的形式有所不同,本文采用Input类构建,这里默认输入图片大小为(50,50,3)。使用代码可以清晰看出VGG的每一层参数。
这里加载模型的参数,需要下载h5文件到本地,这里主要介绍建立VGG16模型的步骤,代码主要参照keras VGG源码,地址:
https://github.com/tensorflow/tensorflow/blob/r1.10/tensorflow/python/keras/applications/vgg16.py
import tensorflow as tf
from tensorflow import keras
from keras import Model,Sequential
from keras.layers import Flatten, Dense, Conv2D, GlobalAveragePooling2D
from keras.layers import Input, MaxPooling2D, GlobalMaxPooling2D
def VGG16(num_classes,importModel = None):
image_input = Input(shape = (50,50,3))
#block1
x = Conv2D(64,(3,3),activation = 'relu',padding = 'same',name = 'block1_conv1')(image_input)
x = Conv2D(64,(3,3),activation = 'relu',padding = 'same', name = 'block1_conv2')(x)
x = MaxPooling2D((2,2), strides = (2,2), name = 'block1_pool')(x)
#block2
x = Conv2D(128,(3,3),activation = 'relu',padding = 'same',name = 'block2_conv1')(x)
x = Conv2D(128,(3,3),activation = 'relu',padding = 'same',name = 'block2_conv2')(x)
x = MaxPooling2D((2,2),strides = (2,2),name = 'block2_pool')(x)
#block3
x = Conv2D(256,(3,3),activation = 'relu',padding = 'same',name = 'block3_conv1')(x)
x = Conv2D(256,(3,3),activation = 'relu',padding = 'same',name = 'block3_conv2')(x)
x = Conv2D(256,(3,3),activation = 'relu',padding = 'same',name = 'block3_conv3')(x)
x = MaxPooling2D((