AlexNet模型分析与实现

卷首语:对于上次详谈CNN的文章,我看到很多负面评论。哎呀我滴个小心脏,不甘心的我也请了我的老友(软件工程专业)作为读者对上一篇文章进行了评判,只见他猛地将一口老白干咽下,眼神迷离的看向远方缓缓吐出一个字“懵”……

就这表情

于此,我也进行了及其深刻的反思,本着写文章应对读者负责,在尽量提高质量的同时,一定一定要再降低一些门槛(门槛??在作者的键盘下是不存在的!

本文范围:

     AlexNet-8案例分析与实现

阅前须知:

     本文分析方面会站在两个GPU通道的基础上进行分析讲解,代码实现采用单GPU进行模拟传播,代码中的参数并非最优,请读者适当加以思考进行改进

AlexNet:

简介:2012ImageNet图像识别大赛冠军,可以说是许多后续DCNN模型开发的参照范例

AlexNet

    如上图,我们可以看出该模型分为上下两组通道同时卷积处理。没错,AlexNet的作者利用两台GPU服务器对其进行模型训练。

模型分析:

        上图所示,本模型的深度为八层:五层卷积,三层全连接。

可能产生误解的关键词:

通道:深度
LRN:局部相应归一化

卷积类

(在卷积类这里,因为卷积核在两个GPU通道上的工作原理基本一样,所以我会只写一个通道的例子)

Layer-1

第一层

输入:长*宽*色深(224*224*3)

卷积:长*宽*通道*步长(11*11*96*4),这里的卷积结果被一分为二,后续将会在两个独立的GPU上进行同步操作

激活函数:ReLU

池化:最大池化长*宽*步长(3*3*2)

备注:添加LRN

输出:长*宽*通道(27*27*96),且分为两组,每组分别为(27*27*48)

TensorFlow代码实现:

(注:实际上,图片参数为256*256*3,Paper作者将其进行了“数据增强”,随机截取224*224大小的图像进行优化训练。但在我看了很多与之相关的博文与Paper后,多数人都认为输入层应采取227*227*3的形式,可以完整的被卷积,从而免去全零填充的过程)

Layer-2

第二层

输入:长*宽*通道(27*27*48)

卷积:长*宽*通道*步长(5*5*128*1),且采用全零填充,两个GPU进行同步卷积

激活函数:ReLU

池化:最大池化长*宽*步长(3*3*2)

备注:添加LRN

输出:长*宽*通道(13*13*128)

TensorFlow代码实现:

代码

Layer-3

第三层

输入:长*宽*通道(13*13*128)

卷积:长*宽*通道*步长(3*3*192*1),且采用全零填充,两个GPU进行同步卷积,输出结果交叉运算

激活函数:ReLU

输出:长*宽*通道(13*13*192)

TensorFlow代码实现:

(注:在当时我学习此模型时的笔记上认为此步骤主要是为了交换特征,类似于特征归类,两个GPU通道图区的特征也主要分为两类)

Layer-4

第四层

输入:长*宽*通道(13*13*192)

卷积:长*宽*通道*步长(3*3*192*1),且采用全零填充,两个GPU进行同步卷积

激活函数:ReLU

输出:长*宽*通道(13*13*192)

TensorFlow代码实现:

代码

Layer-5

第五层

输入:长*宽*通道(13*13*192)

卷积:长*宽*通道*步长(3*3*128*1),且采用全零填充,两个GPU进行同步卷积

激活函数:ReLU

池化:最大池化长*宽*步长(3*3*2)

输出:长*宽*通道(6*6*128)

代码

全连接层

Layer-6

第六层

输入:将特征矩阵拉成一维的List,且分为两组,(6*6*256)/2=4096

全连接层:shape = (4096,2048),两组GPU同步计算

激活函数:ReLU

备注:添加dropout

输出:节点*通道(2048*2)

TensorFlow代码实现:

(注:因为此模型的连接点太多,很容易造成冗余与过拟合问题,作者在此处使用抛出率为0.5的dropout,验证了其在深度神经网络中的效果)

Layer-7

第七层

输入:两组2048的节点参数

全连接层:shape = (2048,2048),两组GPU同步计算

激活函数:ReLU

备注:添加dropout

输出:节点*通道(2048*2)

TensorFlow代码实现:

代码

Layer-8

第八层

输入:两组2048的节点参数在通道上进行拼接,组成4096的节点参数

全连接层:shape = (4096,1000),则一GPU进行计算即可

备注:最后一层采用softmax

输出:经softmax后的答案,1000种

TensorFlow代码实现:

代码

卷尾语:

至此,我们的经典模型AlexNet-8的分析就结束了,众所周知卷积网络与全连接网络相比最大的优势就是权值共享导致的参数量大幅度降低,但本模型的参

数量依旧很庞大。虽然Paper的作者是使用的两个GPU进行运算的,但是我们完全可以用TensorFlow或Keras进行一个GPU甚至CPU进行

模拟,当然CPU的速度要慢的很多。

         AlexNet现在大多都做为教学上的一种经典案例,辉煌的时代基本上已经过去了。不过,我们现在仍会在VGG等仍在使用的模型中看到他的影子,可以说留给后人的影响是非常巨大的。

         最后,欢迎大家在下方评论中提出一些改进性的意见或者建议,我会逐渐的完善自己的写作风格,尽量让大家都能看懂,都能学会,都能说出一句:这小子写的还蛮不赖的!

(未完待续)

注:本文原创,已售与“昂钛客AI”

你可能感兴趣的:(AlexNet模型分析与实现)