AlexNet :ImageNet Classification

2018-08-06  本文已影响0人  Loopz

网络架构:

网络架构

整个网络一共有八层,包括5层卷积层,3层全连接层,最后一层为输出层,输出1000维的vector,表示该image在1000类图像的分布情况。

每一卷积层和全连接层的都与激活层相连。第一,第二层卷积层之后,紧连着局部响应归一化层(Local Response Normalization),之后为池化层(下采样,MaxPooling)。第五层卷积层,紧连着池化层。

各层策略:

Local Response Normalization:

将当前神经元的输出与其邻近的n个神经元做归一化,对输出做一个尺度变换,(使得每个输出分布更集中,加快收敛,泛化性能)。ai表示第i个神经元输出,bi表示归一化后的神经元输出,k,a,n为常量,为超参数。

Local Response Normalization

Maxpooling层:

Max Pooling对得到的结果进行下采样,缩小输出结构。以往的池化层,采取无重叠池化。在AlexNet中,作者采用有重叠池化。实验结果表明,有重叠池化较无重叠池化更难于过拟合。假设输入为I,pooling区域大小为F,步长为stride,则输出大小为:(I - F)/stride  + 1

当无重叠池化时,F=stride,即 I/stride - F/stride + 1 = I/stride。

文中取F = 3,stride =2 即 (I - 3)/2 + 1

non-overlapping overlapping

个人感觉重叠池化做法,与HOG特征生成过程中的归一化有点类似,归一化过程 ,block之间是有重叠的。重叠池化,考虑周围特征,把局部最显著的特征留下。

激活层(激活函数的选择):

tanh Vs ReLu

文中从收敛速度角度对比了tanh与ReLu激活函数,如图(实线表示ReLu,虚线表示tanh)。从图可看到,以tanh为激活函数,需要经过更多个epoch才能达到0.25的错误率。以ReLu为激活函数,模型收敛速度更快。

整体架构:

input(224 * 224 *3)

first layer:

first,second layer

Conv(Filter : 11*11*96,stride=4): (224 - 11)/4 +1 = 55  , 55*55 * 96   (拆成 55*55 * 48,,55*55*48便于两块CPU并行工作)

maxpooling: (55 - 3) /2 +1 = 27

second layer:

Conv (Filter:3*3*256,stride = 1,zero padding,padding = 1):(27+2 - 3)/1 +1 = 27, 27*27*256  (拆成 27*27 * 128,,27*27*128)

maxpooling: (27 - 3) /2 +1 = 13

thrid layer:


third,fourth layer

Conv (Filter:3*3*384,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*384  (拆成 13*13* 192,,13*13*192)

fourth layer:

Conv (Filter:3*3*384,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*384 (拆成 13*13 * 192,,13*13*192)

Fifth layer:

fifth layer

Conv (Filter:3*3*256,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*256  (拆成 13*13 * 128,,13*13*128)

maxpooling: (13 - 3) /2 +1 = 6

全连接层

全连接层可看成上一层特征与同等大小的卷积核卷积得到。

第六层:

输入为: 6*6*128

滤波器:6*6 * 4096(4096个滤波器,每个滤波器有128个卷积核,每个卷积核大小 6*6) 得到 1*1*4096

下一层:1*1* 4096

最后一层:1*1*1000(1000个滤波器,每个滤波器有4096个卷积核,每个卷积核大小 1*1)

训练及优化:

减少过拟合风险:

数据增强(data argumentation):

对现有的数据进行一定的变换,用于训练。变换需是有意义的变换

1.对一256*256的图像,随机采样得到224*224的图片,并变换得到其水平反射图像,训练的样本增加2048倍((256-224)**2 * 2)

2.原本图像加上主成分特征向量与特征值和一个随机变量的乘积。

PCA数据变换 注释

dropout:以0.5的概率将一些的神经元输出设为0。

训练:

训练策略:用随机梯度下降的动量形式训练模型。

参数更新

参数初始化:

以均值为0,标准差为0.01的高斯分布初始化参数w。

学习率的改变:

初始化为0.01,当验证集错误率停止上升时,学习速率除以10,学习速率减小。


问题:为什么归一化层只在前两层?激活层:从线性到非线性的映射。滤波器3*3?maxpooling,3,4,5层的作用。从卷积层到最后输出采用全连接层的作用。

归一化的作用?

overlapping Pooling?

ReLu负半轴为0,未能激活?

代码:https://github.com/kratzert/finetune_alexnet_with_tensorflow

上一篇下一篇

猜你喜欢

热点阅读