AlexNet 网络复现
参数总量(复现版) 6616714
原版AlexNet用于ImageNet2012数据集的分类预测。但是ImageNet是一个巨大的数据集(132GB),同时在最新的Pytorch当中也不提供下载了,所以便于练习,这里复现使用了CIFAR10这个小型数据集,同时因为图片尺寸不同,对网络也进行了相应的调整。
论文链接
http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
AlexNet与LeNet有何不同?
主要差异在以下四点:
- 卷积网络更深(3 层 -> 5层)
- 使用了Local Response Normalization (LRN) 防止过拟合
- 后来VGG的论文中提到这个LRN实际上没什么卵用。
- 用MaxPool取代AvgPool。
- 效果拔群,我自己也在LeNet-5的复现中尝试过, 对预测准度有显著提升
- 使用了DropOut这个防止过拟合的trick
除此以外AlexNet的参数总量是LeNet-5的数十倍。原文
AlexNet原版网络结构
size/operation | kernel size | Depth stride | Stride | Padding | # Parameters |
---|---|---|---|---|---|
3 * 227 * 227 | |||||
Conv1 + ReLU | 11 | 96 | 4 | (11 * 11 * 3 + 1) * 96 = 34944 | |
96 * 55 * 55 | |||||
Max Pooling | 3 | 2 | |||
96 * 27 * 27 | |||||
Norm | |||||
Conv2 + ReLU | 5 | 256 | 1 | 2 | (5 * 5 * 96 + 1) * 256 = 614656 |
256 * 27 * 27 | |||||
Max Pooling | 3 | 2 | |||
256 * 13 * 13 | |||||
Norm | |||||
Conv3+ ReLU | 3 | 384 | 1 | 1 | (3 * 3 * 256 + 1) * 384 = 885120 |
384 * 13 * 13 | |||||
Conv4+ ReLU | 3 | 384 | 1 | 1 | (3 * 3 * 384 + 1) * 384 = 1327488 |
384 * 13 * 13 | |||||
Conv3+ ReLU | 3 | 256 | 1 | 1 | (3 * 3 * 384 + 1) * 256 = 884992 |
256 * 13 * 13 | |||||
Max Pooling | 3 | 2 | |||
256 * 6 * 6 | |||||
FC6+ReLU | (256 * 6 * 6 ) * 4096 = 37748736 | ||||
4096 | |||||
Dropout (rate 0.5) | |||||
FC7 + ReLU | 4096 * 4096 = 16777216 | ||||
4096 | < |