深度学习AlexNet模型详细分析

Alex在2012年提出的alexnet网络结构模型引爆了神经网络的应用热潮,并赢得了2012届图像识别大赛的冠军,使得CNN成为在图像分类上的核心算法模型。

接下来本文对该网络配置结构中各个层进行详细的解读(训练阶段):

注:下述关于卷积核的尺寸来自于Alex在2012年发表的经典论文。
在这里插入图片描述

  1. conv1阶段DFD(data flow diagram):
    在这里插入图片描述

第一层输入数据为原始的2272273的图像,这个图像被11113的卷积核进行卷积运算,卷积核对原始图像的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动,移动的步长是4个像素。因此,卷积核在移动的过程中会生成(227-11)/4+1=55个像素(227个像素减去11,正好是54,即生成54个像素,再加上被减去的11也对应生成一个像素),行和列的5555个像素形成对原始图像卷积之后的像素层。共有96个卷积核,会生成555596个卷积后的像素层。96个卷积核分成2组,每组48个卷积核。对应生成2组555548的卷积后的像素层数据。这些像素层经过relu1单元的处理,生成激活像素层,尺寸仍为2组5555*48的像素层数据。

这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为33,运算的步长为2,则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为272796;然后经过归一化处理,归一化运算的尺度为55;第一卷积层运算结束后形成的像素层的规模为272796。分别对应96个卷积核所运算形成。这96层像素层分为2组,每组48个像素层,每组在一个独立的GPU上进行运算。

反向传播时,每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的96个偏差值。

  1. conv2阶段DFD(data flow diagram):
    在这里插入图片描述

第二层输入数据为第一层输出的272796的像素层,为便于后续处理,每幅像素层的左右两边和上下两边都要填充2个像素;272796的像素数据分成272748的两组像素数据,两组数据分别再两个不同的GPU中进行运算。每组像素数据被5548的卷积核进行卷积运算,卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,卷积核在移动的过程中会生成(27-5+22)/1+1=27个像素。(27个像素减去5,正好是22,在加上上下、左右各填充的2个像素,即生成26个像素,再加上被减去的5也对应生成一个像素),行和列的2727个像素形成对原始图像卷积之后的像素层。共有256个5548卷积核;这256个卷积核分成两组,每组针对一个GPU中的272748的像素进行卷积运算。会生成两组2727128个卷积后的像素层。这些像素层经过relu2单元的处理,生成激活像素层,尺寸仍为两组2727128的像素层。

这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为33,运算的步长为2,则池化后图像的尺寸为(57-3)/2+1=13。 即池化后像素的规模为2组1313128的像素层;然后经过归一化处理,归一化运算的尺度为55;第二卷积层运算结束后形成的像素层的规模为2组1313128的像素层。分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核,共2个GPU进行运算。

反向传播时,每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的256个偏差值。

  1. conv3阶段DFD(data flow diagram):
    在这里插入图片描述

第三层输入数据为第二层输出的2组1313128的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是33256。因此,每个GPU中的卷积核都能对2组1313128的像素层的所有数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU中共1313192个卷积核。2个GPU中共1313384个卷积后的像素层。这些像素层经过relu3单元的处理,生成激活像素层,尺寸仍为2组1313192像素层,共1313*384个像素层。

  1. conv4阶段DFD(data flow diagram):
    在这里插入图片描述

第四层输入数据为第三层输出的2组1313192的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是33192。因此,每个GPU中的卷积核能对1组1313192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU中共1313192个卷积核。2个GPU中共1313384个卷积后的像素层。这些像素层经过relu4单元的处理,生成激活像素层,尺寸仍为2组1313192像素层,共1313*384个像素层。

  1. conv5阶段DFD(data flow diagram):
    在这里插入图片描述

第五层输入数据为第四层输出的2组1313192的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核,每个卷积核的尺寸是33192。因此,每个GPU中的卷积核能对1组1313192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU中共1313128个卷积核。2个GPU中共1313256个卷积后的像素层。这些像素层经过relu5单元的处理,生成激活像素层,尺寸仍为2组1313128像素层,共1313*256个像素层。

2组1313128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为33,运算的步长为2,则池化后图像的尺寸为(13-3)/2+1=6。 即池化后像素的规模为两组66128的像素层数据,共66*256规模的像素层数据。

  1. fc6阶段DFD(data flow diagram):
    在这里插入图片描述

第六层输入数据的尺寸是66256,采用66256尺寸的滤波器对第六层的输入数据进行卷积运算;每个66256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个66256尺寸的滤波器对输入数据进行卷积运算,通过4096个神经元输出运算结果;这4096个运算结果通过relu激活函数生成4096个值;并通过drop运算后输出4096个本层的输出结果值。

 由于第六层的运算过程中,采用的滤波器的尺寸(6*6*256)与待处理的feature map的尺寸(6*6*256)相同,即滤波器中的每个系数只与feature map中的一个像素值相乘;而其它卷积层中,每个滤波器的系数都会与多个feature map中像素值相乘;因此,将第六层称为全连接层。

第五层输出的66256规模的像素层数据与第六层的4096个神经元进行全连接,然后经由relu6进行处理后生成4096个数据,再经过dropout6处理后输出4096个数据。

  1. fc7阶段DFD(data flow diagram):
    在这里插入图片描述

第六层输出的4096个数据与第七层的4096个神经元进行全连接,然后经由relu7进行处理后生成4096个数据,再经过dropout7处理后输出4096个数据。

  1. fc8阶段DFD(data flow diagram):
    在这里插入图片描述

第七层输出的4096个数据与第八层的1000个神经元进行全连接,经过训练后输出被训练的数值。

Alexnet网络中各个层发挥的作用如下表所述:
在这里插入图片描述

在学习过程中,我们使用随机梯度下降法和一批大小为128、动力为0.9、权重衰减为0.0005的样例来训练我们的网络。我们发现,这少量的权重衰减对于模型学习是重要的。换句话说,这里的权重衰减不仅仅是一个正则化矩阵:它减少了模型的训练误差。对于权重w的更新规则为:
在这里插入图片描述

其中i是迭代指数,v是动力变量,ε是学习率,是目标关于w、对求值的导数在第i批样例上的平均值。我们用一个均值为0、标准差为0.01的高斯分布初始化了每一层的权重。我们用常数1初始化了第二、第四和第五个卷积层以及全连接隐层的神经元偏差。该初始化通过提供带正输入的ReLU来加速学习的初级阶段。我们在其余层用常数0初始化神经元偏差。
对于所有层都使用了相等的学习率,这是在整个训练过程中手动调整的。我们遵循的启发式是,当验证误差率在当前学习率下不再提高时,就将学习率除以10。学习率初始化为0.01,在终止前降低三次。作者训练该网络时大致将这120万张图像的训练集循环了90次,在两个NVIDIA GTX 580 3GB GPU上花了五到六天。

各种layer的operation更多解释可以参考http://caffe.berkeleyvision.org/tutorial/layers.html

从计算该模型的数据流过程中,该模型参数大概5kw+。

在caffe开源的model样例中,它也给出了alexnet的复现,具体网络配置文件如下https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt:

作者:南极粥
来源:CSDN
原文:https://blog.csdn.net/zyqdragon/article/details/72353420
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值