分享

PyTorch(十二)——常用卷积神经网络之AlexNet

 taotao_2016 2019-09-27

AlexNet简述

AlexNet可以算是LeNet的一个更深、更广的版本,在LeNet基础上加深了网络结构,可以用来学习更高维更复杂的对象。

  1. 使用层叠的卷积层,即使用卷积层+卷积层+池化层提取特征。
  2. 重叠最大池,避免平均池的平均效果。
  3. 使用Dropout在训练期间有选择性地忽略单个神经元,抑制过拟合。
  4. 使用数据增强Data Augmentation抑制过拟合。
  5. 使用ReLU激活函数得到非线性。
  6. 多GPU训练。

AlexNet网络结构

下图为AlexNet的网络结构,除去输入层共有8层,前5层为卷积层,后3层为全连接层。

PyTorch(十二)——常用卷积神经网络之AlexNet

AlexNet网络结构

  • 输入层

需要注意的是,上图中的输入是224x224,但是根据输出矩阵大小计算公式(n-f+2p)/s+1,在步长s=4的情况下,224并不整除,而使用227x227作为输入,则正好整除。因此实际应用中我们往往会通过数据增强对输入图像进行随机裁剪到227x227的尺寸。

  • C1层-卷积层

这一层的处理流程为:卷积->ReLU激活->池化->归一化。首先使用96个11x11x3的卷积核对输入图像进行卷积运算,得到55x55x96的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中,使用3x3的核进行池化,这里使用重叠池化,设置步长为2小于池化核宽度,得到((55-3+2x0)/2+1=27)27x27x96的FeatureMap。最后进行局部归一化输出,输出分2组,每组大小为27x27x48。共有96x11x11x3+96=34848个参数。

  • C2层-卷积层

这一层也是卷积层,处理流程与C1层一样:卷积->ReLU激活->池化->归一化。输入是2组27x27x48的FeatureMap,使用2组128个尺寸为5x5x48的卷积核对输入进行卷积运算,这里使用边缘填充p=2,设置步长s=1,得到的是2组大小为((27-5+2x2)/1+1)27x27x128的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中,使用3x3的核、步长为2进行重叠池化,得到((27-3+2x0)/2+1=13)13x13x256的FeatureMap。最后进行局部归一化输出,输出分2组,每组大小为13x13x128。共有(128x5x5x48+128)x2=307456个参数。

  • C3层-卷积层

这一层卷积层的处理流程比前2层简单点,只进行卷积->ReLU激活。输入是2组13x13x128的FeatureMap,使用2组192个尺寸为3x3x256的卷积核对输入进行卷积运算,这里使用边缘填充p=1,设置步长为1,得到2组((13-3+2x1)/1+1=13)13x13x192的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中进行激活输出。共有(192x3x3x256+192)x2=885120个参数。

  • C4层-卷积层

这一层卷积层的处理流程与C3层一样,只需进行卷积->ReLU激活。输入是2组13x13x192的FeatureMap,使用2组192个尺寸为3x3x192的卷积核对输入进行卷积运算,使用边缘填充p=1,设置步长为1,得到2组((13-3+2x1)/1+1=13)13x13x192的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中进行激活输出。共有(192x3x3x192+192)x2=663936个参数。

  • C5层-卷积层

这一层卷积层的处理流程为:卷积->ReLU激活->池化。输入是2组13x13x192的FeatureMap,使用2组128个尺寸为3x3x192的卷积核对输入进行卷积运算,使用边缘填充p=1,设置步长为1,得到的是2组大小为((13-3+1x2)/1+1)13x13x128的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中,使用3x3的核、步长为2进行重叠池化,得到((13-3+2x0)/2+1=6)6x6x256的FeatureMap。共有(128x3x3x192+128)x2=442624个参数。

  • F6层-全连接层

这一层虽然被称为全连接层,但它实际也是卷积运算,只是它的卷积核尺寸与待处理特征图尺寸相同,流程为:卷积->ReLU集合->Dropout随机失活。输入的是6x6x256的FeatureMap,使用4096个相同尺寸的卷积核对输入进行卷积运算,得到((6-6+1x0)/1+1)1x1x4096的FeatureMap。然后将输出的FeatureMap输入到激活函数ReLU中,生成4096个值。最后通过Dropout随机失活随机断开某些神经元的连接或不激活某些神经元来抑制过拟合。共有6x6x256x4096+4096=37752832个参数。

  • F7层-全连接层

这一层也是全连接层,流程为全连接->ReLU集合->Dropout随机失活。输入为4096个向量,使用全连接输出FeatureMap,然后将输出的FeatureMap输入到激活函数ReLU中,生成4096个值。最后通过Dropout随机失活抑制过拟合。共有4096x4096+4096=16781312个参数。

  • Output层-全连接层

输出层也是全连接层,将F7层输出的4096个数据与此层的1000个神经元全连接,经过训练后输出1000个值,即最终的预测结果。

PyTorch中使用AlexNet

在Pytorch的vision包中已经实现了Alexnet的封装,我们可以直接借助Pytorch来使用Alexnet网络。

PyTorch(十二)——常用卷积神经网络之AlexNet

PyTorch创建AlexNet

运行结果如下。

PyTorch(十二)——常用卷积神经网络之AlexNet

运行结果

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多