1. VGG11
虽然AlexNet证明深层神经网络卓有成效,但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。研究人员开始从单个神经元的角度思考问题,发展到整个层,现在又转向块(不断使用重复层的模式)。
1.1 VGG块
经典卷积神经网络的基本组成部分是下面的这个序列:
- 带填充以保持分辨率(保持输入输出形状尺寸大小相同)的卷积层;
- 非线性激活函数,如ReLU;
- 汇聚层,如最大汇聚层。
一个VGG块与之类似,由一系列卷积层组成,后面再加上用于空间下采样的最大汇聚层。在最初的VGG论文中,作者使用了带有 3×3 卷积核、填充为1(保持高度和宽度)的卷积层,和带有 2×2 汇聚窗口、步幅为2(每个块后的分辨率减半)的最大汇聚层。
下面代码vgg_block()实现了一个VGG块,该函数有三个参数,分别对应于卷积层的数量num_convs、输入通道的数量in_channels 和输出通道的数量out_channels.:
def vgg_block(nums_conv2d,in_channels,out_channels):
blocks = []
for _ in range(nums_conv2d):
blocks.append(nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=3,padding=1))
blocks.append(nn.ReLU())
in_channels = out_channels
blocks.append(nn.MaxPool2d(kernel_size=2,stride=2))
return nn.Sequential(*blocks)
1.2 VGG网络
与AlexNet、LeNet一样,VGG网络可以分为两部分:第一部分主要由卷积层和汇聚层组成,第二部分由全连接层组成,如下图所示。卷积块的作用主要是替换AlexNet网络前面五层卷积层,因为AlexNet卷积层的卷积核大小,通道数,步幅数设置的没有规律,而使用VGG块更有利于网络更加简洁,从而使网络架构不会那么复杂
原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。 第一个模块有64个输出通道,每个后续模块将输出通道数量翻倍,直到该数字达到512。由于该网络使用8个卷积层和3个全连接层,因此它通常被称为VGG-11。

VGG模型代码:
def vgg(conv2d_arch):
VGG_blocks = []
in_channels = 1
#for循环来添加每个卷积块,卷积层模块
for nums_conv2d,out_channels in conv2d_arch:
VGG_blocks.append(vgg_block(nums_conv2d=nums_conv2d,in_channels=in_channels,out_channels=out_channels))
in_channels = out_channels #下一层卷积层输入channels数为上一层卷积层输出channels
return nn.Sequential(*VGG_blocks,
nn.Flatten(),
# 全连接层模块则与AlexNet中的相同。in_channels数为最后一层卷积层的输出channels(然后赋值给in_channels,在for循环里面赋值进行的,作为下一层Flatten层的输入,铺平展开后,输入到全连接层,因此全连接层输入in_features=in_channels*7*7)
nn.Linear(in_features=in_c

本文详细介绍了VGG11网络结构,包括其基本组件VGG块的设计,如何通过可复用的卷积块简化网络,以及在Fashion-MNIST上的训练过程。重点讲解了3x3卷积和深度设计对性能的影响。
最低0.47元/天 解锁文章
1232

被折叠的 条评论
为什么被折叠?



