简介
2012 年,Krizhevsky 与 Hinton 推出了 AlexNet,引起了许多学者对深度学习的研究,可以算是深度学习的热潮的起始标志。在图像分类领域不得不提的就是ImageNet大规模视觉挑战赛(ILSVRC),它被称为深度学习在图像分类任务研究方面进展的标杆。AlexNet网络参加了ILSVRC2012年大赛,以高出第二名10%的性能优势取得了冠军。AlexNet网络也是VGGNet、GoogLeNet、ResNet、DenseNet等经典网络的基础和开端。
特点
AlexNet 的特点如下所示:
(1)采用双GPU网络结构,从而可以设计出更“大”、更“深”的网络(相较于当时的算力来说);
(2)采用ReLu代替tanh,稍微解决梯度消失问题(Gradient Vanishing Problem),加快网络收敛速度;
(3)提出局部相应归一化(LRN, Local Response Normalization);
(4)令pooling操作中的stride小于池化核的大小,从而使相邻的池化区域存在重叠部分,这一操作称为Overlapping Pooling;
(5)对训练数据进行随机裁剪(Random Crop),将训练图像由256×256裁剪为224×224,并做随机的镜像翻转(Horizontal Reflection)。并在测试时,从图像的四个角以及中心进行裁剪,并进行镜像翻转,这样可以得到10个Patch,将这些 Patch 的结果进行平均,从而得到最终预测结果;
(6)对训练图像做PCA(主成分分析),利用服从 (0,0.1) 的高斯分布的随机变量对主成分进行扰动。这一操作能减少指标Top-1的1%错误率;
(7)利用dropout 避免网络过拟合。
代码
self.features = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2),
nn.Conv2d(96, 256, 5, 1, 2),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2),
nn.Conv2d(256, 384, 3, 1, 1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 384, 3, 1, 1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, 3, 1, 1),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2)
)