卷积神经网络之VGG
VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路。
VGG模型
VGG块的组成规律是:
- 连续使用数个相同的填充为1,、窗口形状为3*3的卷积层
- 后接一个步幅为2、窗口形状为2*2的最大赤化层
卷积层保持输入的宽和高不变,而池化层对其减半。
VGG根据网络层数不一有不同的版本,其中VGG-11是由8个卷积层+3个全连接层组成。
下图展示了VGG-11、VGG-13、VGG-16、VGG-19的网络结构与具体参数。
代码
vgg_block
函数来实现这个基础的VGG块,它可以指定卷积层的数量num_convs
和输出通道数num_channels
import d2lzh as d2l
from mxnet import gluon, init, nd
from mxnet.gluon import nn
def vgg_block(num_convs, num_channels):
blk = nn.Sequential()
for _ in range(num_convs):
blk.add(nn.Conv2D(num_channels, kernel_size=3,
padding=1, activation='relu'))
blk.add(nn.MaxPool2D(pool_size=2, strides=2))
return blk
VGG-11网络:
conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))
def vgg(conv_arch):
net = nn.Sequential()
# 卷积层部分
for (num_convs, num_channels) in conv_arch:
net.add(vgg_block(num_convs, num_channels))
# 全连接层部分
net.add(nn.Dense(4096, activation='relu'), nn.Dropout(0.5),
nn.Dense(4096, activation='relu'), nn.Dropout(0.5),
nn.Dense(10))
return net
net = vgg(conv_arch)
总结:
- 使用连续的的多个小卷积核(3×3),来代替一个大的卷积核(例如(5×5)。
- 使用小的卷积核的其感受野必然变小。所以,VGG中就使用连续的3×3卷积核,来增大感受野。
- VGG认为2个连续的3×3卷积核能够替代一个5×5卷积核,三个连续的3×3能够代替一个7×7。
- 通道数更多,特征度更宽,更多的通道数表示更丰富的图像特征。
- VGG-11通过5个可以重复使用的卷积块来构造网络
- 根据卷积层个数和输出通道数的不同可以定义出不同的VGG模型
代码参考自:<<动手学深度学习>>
其他经典网络结构: