美文网首页
CNN卷积的计算以AlexNet为例

CNN卷积的计算以AlexNet为例

作者: 一只大南瓜 | 来源:发表于2019-02-27 15:06 被阅读0次

    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

    相关文章

      网友评论

          本文标题:CNN卷积的计算以AlexNet为例

          本文链接:https://www.haomeiwen.com/subject/bnmxuqtx.html