1 AlexNet介绍
AlexNet是2012年ISLVRC 2012(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,分类准确率由传统的70%+提升到80%+。
AlexNet由Hinton和它的学生Alex Krizhevsky设计的。也是在那年之后,深度学习开始迅速发展。
ISLVRC 2012
训练集:1281167张已标注图片
验证集:50000张已标注图片
测试集:100000张未标注图片
该网络分为上下两部分,因为当时作者使用了两块GPU进行并行运算。上下两部分一模一样,只需分析其中一部分即可。
该网络的亮点在于:
- 首次利用GPU进行网络加速训练。
- 使用了ReLU激活函数,而不是传统的Sigmoid激活函数以及Tanh激活函数。
- 使用了IRN局部响应归一化。
- 在全连接层的前两层中使用了Dropout随机失活神经元操作,以减少过拟合。
过拟合:根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训练数据,而没有考虑到泛化能力。
使用Dropout的方式在网络正向传播过程中随机失活一部分神经元。
2 AlexNet过程
在卷积操作过程中,矩阵经卷积操作后的尺寸由以下几个因数决定:
输入图像大小:W * W
Filter大小:F * F
步长:S
padding的像素数:P
经卷积后的矩阵尺寸大小计算公式为:
N=(W-F+2P)/S+1
注:padding为当滑动窗口滑动到最右边列数不够,补零。一般上下左右对称补零。
2.1 Conv1
原始图像:2242243的彩色图像
卷积核大小(kernel_size):11 * 11
卷积核步距(stride):4
卷积核个数(kernels):48*2(其中一部分为48,上下两部分共96)
padding:[1,2](在特征矩阵的左边加入一列0,在右边加入两列0)
输出计算:
inout_size:[224,224,3]
N=(W-F+2P)/S+1=[224-11+(1+2)]/4+1=55
output_size:[55,55,96]
2.2 Maxpool1
kernel_size:3
padding:0
stride:2
输出计算
input_size:[55,55,96]
N=(W-F+2P)/S+1=(55-3)/2+1=27
output_size:[27,27,96]
2.3 Conv2
kernels:128*2=256
kernel_size:5
padding:[2,2]
stride:1
输出计算
input_size:[27,27,96]
N=(W-F+2P)/S+1=(27-5+4)/1+1=27
output_size:[27,27,256]
2.4 Maxpool2
kernel_size:3
padding:0
stride:2
输出计算
input_size:[27,27,256]
N=(W-F+2P)/S+1=(27-3)/2+1=13
output_size:[13,13,256]
2.5 Conv3
kernels:192 * 2=384
kernel_size:3
padding:[1,1]
stride:1
输出计算
input_size:[13,13,256]
N=(W-F+2P)/S+1=(13-3+2)/1+1=13
output_size:[13,13,384]
2.6 Conv4
kernels:192*2=384
kernel_size:3
padding:[1,1]
stride:1
输出计算
input_size:[13,13,384]
N=(W-F+2P)/S+1=(13-3+2)/1+1=13
output_size:[13,13,384]
2.7 Conv5
kernels:128 * 2=256
kernel_size:3
padding:[1,1]
stride:1
输出计算
input_size:[13,13,384]
N=(W-F+2P)/S+1=(13-3+2)/1+1=13
output_size:[13,13,256]
2.8 Maxpool3
kernel_size:3
padding:0
stride:2
输出计算
input_size:[13,13,256]
N=(W-F+2P)/S+1=(13-3)/2+1=6
output_size:[6,6,256]