介绍
VGGNet
VGG 论文地址:
Very Deep Convolutional Networks for Large-Scale Image Recognition
VGG 是一个很经典的卷积神经网络结构,是由 AlexNet 改进的,相比于 AlexNet,主要的改变有两个地方:
- 使用 3 x 3 卷积核代替 AlexNet 中的大卷积核
- 使用 2 x 2 池化核代替 AlexNet 的 3 x 3 池化核
VGGNet 有很多类型,论文中提出了 4 种不同层次的网络结构(从 11 层到 19 层):
这次实现的是 VGG-11,是最简单的,层数最少的 VGG。
特点
VGG 有很多优点,最本质的特点就是用小的卷积核(3x3)代替大的卷积核,2个 3x3 卷积堆叠等于1个 5x5 卷积,3 个 3x3 堆叠等于1个 7x7 卷积,感受野大小不变。
可以想象一下,在步长 s 为 1,填充 padding 为 0 时,2 个 3x3 卷积后的图像 size 为 (((N-3)/1+1)-3)/1+1 = ((N-3+1)-3+1) = N-4 = (N-5)/1+1。且做卷积后,得到的特征,都是从原图像上相同的像素点提取的(原图像每 5x5 的空域像素点对应一个新的特征),因此感受野大小不变。故 2 个 3x3 的卷积核与 5x5 的卷积核等价。
关于感受野的理解,可以参考这篇文章: Receptive field(感受野)
相同的效果,采用小的卷积核,可以增加网络的深度,从而引入更多的非线性(激活函数)。
本次实验要求
这次实验与上次一样,也是在 Cifar-10 数据集上进行验证。同样,因为 VGGNet 输入大小问题,网络参数稍微改了一下,以便传入 32x32 大小的图片。
实验要求如下:
-
VGG 要求实现 VGG-11(Conv部分按论文实现,Classifier直接一层全连接即可)
-
基于VGG(实测速度更快,6s一个epoch,batch size为128时占用显存1274MB,CPU也只要6分钟)进行训练方式对比(LR对比三组及以上【此时选用任一种优化器】,优化器对比SGD与Adam【选用LR对比时的最佳LR】)
代码
代码也没啥特殊的,正常的网络结构,然后训练,测试。注释很全,这里还加入了一些对比实验。
值得注意的是,实验要求中,为了简化,将后三个全连接层合成了一个,据说有人证明,这并不影响性能,不过我并没有试验。
这次实验有两个网络,VGG-11 的代码是队友写的,征得队友同意,放我 github 上了,这里粘贴一下地址吧:
需要注意一点,实验中要求了自定义数据集,可以完全将我写的 Cifar10Dataset
改为 torchvision.datasets.CIFAR10