output_size=( input_size + pad * 2 - conv_size ) / stride + 1
第一层:
输入为224*224*3的RGB图像,会通过预处理变为227*227*3的图像,这个图像被96个kernel采样,每个kernel的大小为11*11*3。stride为4;所以output的大小为(227-11)/4+1=55。.这样得到了96个55 * 55大小的特征图了,并且是RGB通道的。96个卷积核分成2组(因为采用了2个GPU服务器进行处理),每组48个卷积核;所以就有了图中的第一步卷积后的结果为55*55*48.
3.使用RELU激励函数,来确保特征图的值范围在合理范围之内,比如{0,1},{0,255},这些像素层经过relu1单元的处理,生成激活像素层,尺寸仍为2组55 * 55 * 48的像素层数据。
4.这些像素层经过pool运算(最大池化)的处理,池化运算的尺度为3 * 3,stride移动的步长为2,则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为27 * 27 * 96;
5.然后经过归一化处理,归一化运算的尺度为5 * 5;第一卷积层运算结束后形成的像素层的规模为27 *2 7 * 96。分别对应96个卷积核所运算形成。这96层像素层分为2组,每组48个像素层,每组在一个独立的GPU上进行运算。
第二层:
1、第一层输出为两组27*27*48特征图,第二层采用256个5*5*48卷积核,padding=2,所以采样结束后得到的特征图大小为(27+2*2-5)+1=27.256个卷积核分成两组得到27*27*128的特征图
2.这些像素层经过relu2单元的处理,生成激活像素层,尺寸仍为两组27 * 27 * 128的像素层。
3.这些像素层经过pool运算(最大池化)的处理,池化运算的尺度为3 * 3,运算的步长为2,则池化后图像的尺寸为(27-3)/2+1=13。 即池化后像素的规模为2组13 * 13 * 128的像素层。
4.最后经过归一化处理,归一化运算的尺度为5 * 5;第二卷积层运算结束后形成的像素层的规模为2组13 * 13 * 128的像素层。分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核,共2个GPU进行运算。
第三层:
第三层没有pooling层没有归一化层
1、第三层采用384个大小为3*3*256的卷积核。stride=1.每个GPU中都有192个卷积核,每个卷积核的尺寸是3 * 3 * 256。因此,每个GPU中的卷积核都能对2组13 * 13 * 128的像素层的所有数据进行卷积运算。因此,运算后的卷积核的尺寸为(13-3+1 * 2)/1+1=13。每个GPU中共13 * 13 * 192个卷积核。2个GPU中共13 * 13 * 384个卷积后的像素层。
2、.这些像素层经过激活函数relu3,尺寸仍为2组13 * 13 * 192像素层,共13 * 13 * 384个像素层。
第四层:
第四层采用384个kernels,size is 3*3*192 padding=1计算和第三层一样。
第五层:
1、256 kernels of size 3*3*192。padding=1.计算和第三层一样卷积的结果为:每个GPU中共13*13*128个卷积核。2个GPU中共13 * 13 * 256个卷积后的像素层。
2.这些像素层经过激活函数relu5单元处理,尺寸仍为2组13 * 13 * 128像素层,共13 * 13 * 256个像素层。
3.2组13 * 13 * 128像素层分别在2个不同GPU中进行池化(最大池化)处理。池化运算的尺度为3 * 3,运算的步长为2,则池化后图像的尺寸为(13-3)/2+1=6。 即池化后像素的规模为两组6 * 6 * 128的像素层数据,共6 * 6 * 256规模的像素层数据。
第六层:
1、输入数据的尺寸是6 * 6 * 256,采用6 * 6 * 256尺寸的滤波器对输入数据进行卷积运算;每个6 * 6* 256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个6 * 6 * 256尺寸的滤波器对输入数据进行卷积运算,通过4096个神经元输出运算结果;
2、这4096个运算结果通过relu激活函数生成4096个值;
3、在dropout中是说在训练的以1/2概率使得隐藏层的某些neuron的输出为0,这样就丢到了一半节点的输出,BP的时候也不更新这些节点。通过drop运算后输出4096个本层的输出结果值。
第七层:
1.输入的4096个数据与第七层的4096个神经元进行全连接;
2.操作如同然后上一层一样经由relu7进行处理后生成4096个数据;
3.再经过dropout7(同样是以0.5的概率)处理后输出4096个数据。
第八层:
1.第七层输出的4096个数据与第八层的1000个神经元进行全连接,经过训练后输出被训练的数值。
另:
论文中采用了几种方法:
ReLU和多个GPU
为了提高训练速度,AlexNet使用ReLU代替了Sigmoid,其能更快的训练,同时解决sigmoid在训练较深的网络中出现的梯度消失,或者说梯度弥散的问题.
重叠的pool池化
提高精度, 不容易产生过拟合,在以前的CNN中普遍使用平均池化层,AlexNet全部使用最大池化层,避免了平均池化层的模糊化的效果,并且步长比池化的核的尺寸小,这样池化层的输出之间有重叠,提升了特征的丰富性.
局部响应归一化
提高精度,局部响应归一化,对局部神经元创建了竞争的机制,使得其中响应小打的值变得更大,并抑制反馈较小的.
数据增益 Dropout
减少过拟合,使用数据增强的方法缓解过拟合现象
参考文章:
https://blog.csdn.net/Rasin_Wu/article/details/80017920