CNN模型之AlexNet

Alex 2012使用了一些改良CNN方法去解决普适物体识别难题。
开创性地使用了CUDA来加速神经网络训练,并且开放了Cuda-Convnet和绝秘CNN结构,群众反响热烈。又名ConvNet、AlexNet。

模型结构

由于早期GPU显存的限制,最早的AlexNet包括了two stream的设计,以让网络中一半的节点能存入一个GPU。

5层卷积层详情如下:(max pooling: kernel_size=3, stride=2)

层数 input size kernel size # kernels stride padding output size max pooling
1 224×224×3 11×11 96 4 2 55×55×96 yes
2 27×27×96 5×5 256 1 2 27×27×256 yes
3 13×13×256 3×3 384 1 1 13×13×384 no
4 13×13×384 3×3 384 1 1 13×13×384 no
5 13×13×384 3×3 256 1 1 13×13×256 yes

AlexNet的pytorch实现

https://github.com/pytorch/vision/blob/master/torchvision/models/alexnet.py

1
2


为什么跟 https://zhuanlan.zhihu.com/p/31717727 不同

多GPU训练

由于早期GPU显存的限制,AlexNet使用了双数据流的设计,以让网络中一半的节点能存入一个GPU。这两个数据流,也就是说两个GPU只在一部分层进行通信,这样达到限制GPU同步时的额外开销的效果。有幸的是,GPU在过去几年得到了长足的发展,除了一些特殊的结构外,我们也就不再需要这样的特别设计了。

Overlapping Pooling

重叠的池化层

池化操作提取的是一小部分的代表性特征,减少冗余信息。传统的卷积层中,相邻的池化单元是不重叠的。如果stride=kernel_size,我们得到不重叠的池化。如果stride<kernel_size,我们得到重叠的池化。在AlexNet中使用了最大池,stride=2,kernel_size=3。

论文指出,这种池化能“稍微”减轻过拟合。

ReLU

见激活函数-ReLU

学习

使用基于动量的梯度下降算法

batch_size = 128

momentum=0.9

weight_decay=0.0005

code

https://code.google.com/p/cuda-convnet/

tensorflow中的tutorial/cnn也是AlexNet的实现

参考