概述
1.网络概述
在网络深度与网络性能的关系上,牛津大学视觉几何团队提出了一种深层次且性能良好的网络模型,即VGG网络模型。VGG很好地继承了AlexNet的衣钵,同时拥有着鲜明的特点,即网络层次较深。
牛津大学视觉几何团队在ILSVRC 2014上提出了VGGNet。VGGNet的网络结构简单、规整且高效。VGGNet较为典型的网络结构主要有VGG16和VGG19,本节主要介绍VGG16,其网络结构如表5-1所示。
VGGNet对输入图像的默认大小是224×224×3。从表5-1中可以看出,VGG16指该网络结构含有参数的网络层一共16层,即13个卷积层和3个全连接层,不包括池化层和softmax激活函数层。VGG16的卷积核大小是固定的3×3,不同卷积层的卷积核个数不同。最大池化层的池化窗口大小为2×2,步长为2。最后是3个全连接层,神经元个数分别为4096个、4096个和1000个。其中,第3层全连接层有1000个神经元,负责分类输出,最后一层为soft-max输出层。
2.网络特点
1.引入卷积组的概念:卷积核池化
2.层组化规律很强,层次提高
3.网络结构
ConvNet Configuration | ||||||
A | A-LRN | B | C | D | E | |
11 weights layers | 11 weights layers | 13 weights layers | 16 weights layers | 16weights layers | 19weights layers | |
Input(224*224 RGB image) | ||||||
Conv3-64 | Conv3-64 LRN | Conv3-64 Conv3-64 | Conv3-64 Conv3-64 | Conv3-64 Conv3-64 | Conv3-64 Conv3-64 | |
maxpool | ||||||
Conv3-128 | Conv3-128 Conv3-128 | Conv3-128 Conv3-128 | Conv3-128 Conv3-128 | Conv3-128 Conv3-128 | Conv3-128 Conv3-128 | |
maxpool | ||||||
Conv3-256 Conv3-256 | Conv3-256 Conv3-256 | Conv3-256 Conv3-256 | Conv3-256 Conv3-256 Conv3-256 | Conv3-256 Conv3-256 Conv3-256 | Conv3-256 Conv3-256 Conv3-256 Conv3-256 | |
maxpool | ||||||
Conv3-512 Conv3-512 | Conv3-512 Conv3-512 | Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 Conv3-512 | |
maxpool | ||||||
Conv3-512 Conv3-512 | Conv3-512 Conv3-512 | Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 | Conv3-512 Conv3-512 Conv3-512 Conv3-512 | |
maxpool | ||||||
FC-4096 | ||||||
FC-4096 | ||||||
FC-1000 | ||||||
softmax |
VGGNet有两种结构,分别为16层(见表5-1)和19层。从图5-5中可以看出,在VGGNet结构中,所有卷积层的卷积核尺寸都只有(3,3)。VGGNet中连续使用3组(3,3)卷积核(滑动步长为1)是因为它和使用1个(7,7)卷积核产生的效果相同(图5-6以一维卷积为例,解释效果相同的原理)。然而更深的网络结构可以学习到更复杂的非线性关系,从而使模型的训练效果更好。该操作带来的另一个好处是减少参数数量,因为对于一个有C个卷积核的卷积层来说,原来的参数个数为7×7×C,而新的参数个数为3×(3×3×C)。
3.使用tensflow构建VGG19
from tensorflow import keras
import tensorflow as tf
class Vgg_block(keras.layers.Layer):
def __init__(self,units,filters,**kwargs):
super().__init__(**kwargs)
self.main_layer = []
for i in range(units):
self.main_layer.append(keras.layers.Conv2D(filters=filters,kernel_size=(3,2),
padding="same",strides=(1,1),
activation="relu"))
self.main_layer.append(keras.layers.MaxPool2D(pool_size=(2,2)))
def call(self,inputs):
Z = inputs
for layer in self.main_layer:
Z = layer(Z)
return Z
model = keras.models.Sequential()
model.add(keras.layers.Input(shape=(224,224,3)))
model.add(Vgg_block(2,64))
model.add(Vgg_block(2,128))
model.add(Vgg_block(4,256))
model.add(Vgg_block(4,512))
model.add(Vgg_block(4,512))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(4096,activation="relu"))
model.add(keras.layers.Dropout(0.5))
model.add(keras.layers.Dense(4096,activation="relu"))
model.add(keras.layers.Dropout(0.5))
model.add(keras.layers.Dense(1000,activation="softmax"))
最后
以上就是粗犷期待为你收集整理的VGG 网络详解1.网络概述2.网络特点3.网络结构3.使用tensflow构建VGG19 的全部内容,希望文章能够帮你解决VGG 网络详解1.网络概述2.网络特点3.网络结构3.使用tensflow构建VGG19 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复