经典网络AlexNet介绍

AlexNet经典网络由Alex Krizhevsky、Hinton等人在2012年提出,发表在NIPS,论文名为《ImageNet Classification with Deep Convolutional Neural Networks》,论文见:http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf ,论文中的网络结构截图如下:

上图中有时看起来不是很直观,下图是来自https://www.learnopencv.com/understanding-alexnet/ 中的截图:

注意:论文中原始输入大小为224*224*3,上图中输入大小为227*227*3,使用227*227替换为224*224更有意义。

AlexNet网络:

(1).激活函数使用ReLU替代Tanh或Sigmoid加快训练速度,解决网络较深时梯度弥散问题。关于ReLU介绍参考:https://blog.csdn.net/fengbingchun/article/details/73872828

(2).训练时使用Dropout随机忽略一部分神经元,以避免过拟合。关于Dropout介绍参考:https://blog.csdn.net/fengbingchun/article/details/89286485

(3).使用重叠最大池化(Overlapping Max Pooling),避免平均池化时的模糊化效果;并且让步长比池化核的尺寸小,提升特征丰富性。filter的步长stride小于filter的width或height。一般,kernel(filter)的宽和高是相同的,深度(depth)是和通道数相同的。

(4).使用LRN对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其它反馈较小的神经元,增强了模型泛化能力。LRN只对数据相邻区域做归一化处理,不改变数据的大小和维度。关于LRN介绍参考:https://blog.csdn.net/fengbingchun/article/details/112393884

(5).数据扩充(Data Augmentation):训练时随机地从256*256的原始数据中截取227*227大小的区域,水平翻转;光照变换。增加了数据量,大大减少过拟合,提升泛化能力。

(6).多GPU并行运算。

AlexNet输入是一种属于1000种不同类别的一张BGR图像,大小为227*227,输出是一个向量,大小为1000。输出向量的第i个元素值被解释为输入图像属于第i类的概率。因此,输出向量的所有元素的总和为1。

假如输入图像大小为n*n,过滤器(filter)为f*f,padding为p,步长(stride)为s,则输出大小为:如果商不是整数,向下取整,即floor函数。参考:https://blog.csdn.net/fengbingchun/article/details/80262495

AlexNet架构:5个卷积层(ConvolutionReLULRNPooling)+3个全连接层(InnerProductReLUDropout),predict时对各层进行说明:参照https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/deploy.prototxt

(1).输入层(Input):图像大小227*227*3。如果输入的是灰度图,它需要将灰度图转换为BGR图。训练图大小需要为256*256,否则需要进行缩放,然后从256*256中随机剪切生成227*227大小的图像作为输入层的输入。

(2).卷积层1+ReLU+LRN:使用96个11*11的filter,stride为4,padding为0,输出为55*55*96,96个feature maps,训练参数(11*11*3*96)+96=34944。

(3).最大池化层:filter为3*3,stride为2,padding为0,输出为27*27*96,96个feature maps。

(4).卷积层2+ReLU+LRN:使用256个5*5的filter,stride为1,padding为2,输出为27*27*256,256个feature maps,训练参数(5*5*96*256)+256=614656。

(5).最大池化层:filter为3*3,stride为2,padding为0,输出为13*13*256,256个feature maps。

(6).卷积层3+ReLU:使用384个3*3的filter,stride为1,padding为1,输出为13*13*384,384个feature maps,训练参数(3*3*256*384)+384=885120。

(7).卷积层4+ReLU:使用384个3*3的filter,stride为1,padding为1,输出为13*13*384,384个feature maps,训练参数(3*3*384*384)+384=1327488。

(8).卷积层5+ReLU:使用256个3*3的filter,stride为1,padding为1,输出为13*13*256,256个feature maps,训练参数(3*3*384*256)+256=884992。

(9).最大池化层:filter为3*3,stride为2,padding为0,输出为6*6*256,256个feature maps。

(10).全连接层1+ReLU+Dropout:有4096个神经元,训练参数(6*6*256)*4096=37748736。

(11).全连接层2+ReLU+Dropout:有4096个神经元,训练参数4096*4096=16777216。

(12).全连接层3:有1000个神经元,训练参数4096*1000=4096000。

(13).输出层(Softmax):输出识别结果,看它究竟是1000个可能类别中的哪一个。

train(https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/train_val.prototxt)可视化结果(http://ethereon.github.io/netscope/quickstart.html )如下:

predict可视化结果如下:

GitHubhttps://github.com/fengbingchun/NN_Test

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章