首先输入层数据是224*224*3的特征图,使用两个GPU同时进行运算,神经网络图:
神经网络一般越往后层,越要获得细节特征,所以前面的网络层可以设置卷积核大一点,粗略获取特征。
说明: ALexNet是使用两个GPU同时对模型进行训练,所以第一层得到的55*55*96的特征图, 实际上是每个GPU训练 55*55*48的特征图,最后将两个GPU上的特征图合并即可。
首先输入层是224*224*3,先用padding将图片特征变换成227*227*3的特征图。特征提取过程:
AlexNet网络的过程:
AlexNet网络, 1. 使用一个卷积将图片通道变成55*55*96 使用池化将特征图压缩到27*27*96 2. 使用一个卷积增宽通道为 27*27*256 使用池化将特征图压缩 13*13*256 3.使用卷积将通道增加为13*13*384, 继续使用卷积不改变特征图规格13*13*384 4.使用卷积将通道数减少 13*13*256 使用池化将特征图压缩 6*6*256 5.将特征图展开成一维向量,由上一层6*6*256=9216, 所以全连接层变成 [9216,1]的向量 6.减少神经元结点,全连接层变为 [4096,1]的向量, 7.神经元个数不变,继续添加全连接层,依然为[4096,1]的向量, 8.到达输出层,是一个1000分类的模型,所以变成 [1000,1]的向量。
AlexNet神经网络特点:
AlexNet神经网络每个卷积层和每个全连接层都使用Relu激活函数,输出层使用softmax激活函数 AlexNet包含8层神经网络, 5个卷积层, 3个全连接层, AlexNet将sigmoid激活函数改成Relu激活函数后,使激素按更简单,网络更容易训练 AlexNet通过Dropout来控制全连接层的模型复杂度。 AlexNet使用了大量图像增强,如翻转,颜色变化,裁剪,从而扩大数据集,来缓解过拟合
第一层:
第一层卷积核: 两个48@11*11*3 (合并起来就是96@11*11) 步长:4
首先输入层是224*224*3,先用padding将图片特征变换成227*227*3的特征图。
AlexNet ,输入变为227*227,经过第一层卷积后,每个GPU得到55*55*48的特征图,一共两个GPU,如果合并,则是55*55*96 卷积使用Relu激活函数
第一层Max_pool池化核: 3*3 步长为:2 padding=0
得到的特征图为:27*27*96,每个GPU上是27*27*48的
运算公式:
hight是图的高度, padding是添0的边数 size是卷积核的高度, stride是步长
hight = ((hight+2*padding-size)/stride )+ 1
hight = ((227 + 2*0 – 11) / 4) + 1 = 55
weight = ((227 + 2*0 – 11) / 4) + 1 = 55,
每个GPU上卷积核通道数48, 所以每个GPU得到的特征图为 55*55*48
第二层 :
第二层:卷积层2, 输入为上一层卷积的feature map, 卷积核的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为: 5 × 5 × 48 pad = 2, stride = 1; 激活函数使用Relu激活函数, 最后 max_pooling, pool_size = (3, 3), stride = 2;
第三层
在第三层神经网络将两个数据进行相互融合(不是合并), 模型是放在两个GPU上训练的,所以GPU1 和GPU2都各得到了13*13*128的特征图, 怎幺进行融合呢, 就是把GPU1得到的特征图在这一层去和GPU2的卷积层进行卷积运算, 把GPU2得到的特征图去和GPU1的卷积层进行卷积运算。
卷积核个数为384 kernel_size = ( 3 × 3 × 256 ) padding = 1 第三层没有做池化 使用Relu激活函数
第四层
卷积核个数为384, kernel_size=( 3 × 3 ), padding = 1,使用Relu激活函数 第四层没有做池化
第四层操作与第三层完全一样
第五层
卷积核个数为256, kernel_size = ( 3 × 3 ), padding = 1 使用Relu激活函数
使用最大池化,MaxPool, 池化核为3*3 步长为2
全连接层
全连接层将两个GPU的特征合并成一个向量。每层全连接层都使用Relu激活函数。
第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,全连接层中使用了Dropout。
Be First to Comment