• AlexNet架构解析


    参考论文:ImageNet classification with deep convolutional neural networks

    作者:Alex KrizhevskyIlya SutskeverGeoffrey E. Hinton(AI教父,2019图灵奖得主)

      AlexNet是2012年ImageNet图像分类竞赛的冠军,首次将卷积神经网络CNN和深度学习用于大规模图像分类并且性能优异,在今天也具有一定的参考价值。

    1、网络架构

    image-20220811205059678

    这里原图中输入图像的大小应该为227*227,作者应该是笔误写成了224*224
    f e a t u r e m a p 尺寸 = I n p u t + 2 ∗ p a d d i n g − f i l t e r s t r i d e + 1 = 227 + 2 ∗ 0 − 11 4 + 1 = 55 feature map尺寸=\frac{Input+2*padding-filter}{stride} +1 =\frac{227+2*0-11}{4}+1 =55 featuremap尺寸=strideInput+2paddingfilter+1=4227+2011+1=55

      设计成上图的结构是因为当时算力不够,也没什么好用的深度学习开源框架。他们手上只有两个GTX580的3GB内存的GPU,为了加快模型的训练速度,所以将模型分为两个部分。一个GPU训练上面的部分,另一个GPU训练下面的部分。

      若在不改变模型结构的条件下,放在今天的软硬件条件下,AlexNet会被设计成如下结构:

    image-20220811205605423

      图中的 s 表示 stride,代表步长,s1 代表卷积或池化的步长为 1,s2 代表卷积或池化的 步长为 2,以此类推;fc 表示 fully connected,代表全连接;pool 表示 max pooling,代 表最大池化;conv 表示 convolution,代表卷积;output 表示输出。

      AlexNet 是一个 8 层的网络(卷积层和全连接层中有需要训练的权值,所以这里计算网 络层数的时候只计算卷积层和全连接层),除了最后输出层用的是 softmax 函数以外,其他 层用的都是 ReLU 激活函数。

      AlexNet 是专门为 ImageNet 级别的数据集设计的,一共有 6000 多万个需要训练的参数,参数的数量巨大。

    2、计算过程

      第 1 层计算。网络的输入是 227×227 的彩色照片。经过 11×11 步长为 4 的卷积 计算后,得到 96 个 55×55 的特征图。然后再进行 3×3 步长为 2 的最大池化计算,得到 96 个 27×27 的特征图。

      第 2 层计算。使用 5×5,步长为 1 的卷积对 96 个 27×27 的特征图进行特征提取,得到了 256 个 27×27 的特征图。然后再用 3×3 步长为 2 的最大池化计算,得到 256 个 13× 13 的特征图。

      第 3 层计算。使用 3×3,步长为 1 的卷积对 256 个 13×13 的特征图进行特征提取,得到了 384 个 13×13 的特征图。

      第 4 层计算。使用 3×3,步长为 1 的卷积对 384 个 13×13 的特征图进行特征提取,得到了 384 个 13×13 的特征图。

      第 5 层计算。使用 3×3,步长为 1 的卷积对 384 个 13×13 的特征图进行特征提取,得到了 256 个 13×13 的特征图。然后再用 3×3 步长为 2 的最大池化计算,得到 256 个 6×6 的特征图。

      第 6 层计算。把 pool3 的 256 个 6×6 的特征图数据跟 fc1 中的 4096 个神经元进行全连接计算。

      第 7 层计算。把 fc2 的 4096 个神经元跟 fc1 中的 4096 个神经元进行全连接计算。

      第 8 层计算。把 output 的 1000(ImageNet Challenge 比赛有 1000 个分类)个神经元跟 fc2 中的 4096 个神经元进行全连接计算。最后再经过 softmax 计算得到类别的概率值进行输出。

    3、AlexNet模型复现

    这里使用tensorflow框架对AlexNet架构进行复现

    import tensorflow as tf
    from tensorflow.keras.models import Model
    from tensorflow.keras.layers import *
    from plot_model import plot_model
    
    image_size=227
    channel=3
    num_classes=1000
    
    inputs=Input(shape=(image_size,image_size,channel))
    x=Conv2D(filters=96,kernel_size=(11,11),strides=(4,4),padding='valid',
             activation='relu')(input)
    x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
    x=Conv2D(filters=256,kernel_size=(5,5),strides=(1,1),padding='same',
             activation='relu')(x)
    x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
    x=Conv2D(filters=384,kernel_size=(3,3),strides=(1,1),padding='same',
             activation='relu')(x)
    x=Conv2D(filters=384,kernel_size=(3,3),strides=(1,1),padding='same',
             activation='relu')(x)
    x=Conv2D(filters=256,kernel_size=(3,3),strides=(1,1),padding='same',
             activation='relu')(x)
    x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
    x=Flatten()(x)
    x=Dense(4096,activation='relu')(x)
    x=Dropout(0.5)(x)
    x=Dense(4096,activation='relu')(x)
    x=Dropout(0.5)(x)
    x=Dense(num_classes,activation='softmax')(x)
    model=Model(inputs=inputs,outputs=x)
    model.summary()
    plot_model(model,to_file='img/AlexNet.png',show_shapes=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    image-20220811210158569

    image-20220811210209416

    References

    [1] Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[J]. Advances in neural information processing systems, 2012, 25(2).

  • 相关阅读:
    1.0、C语言——初识C语言
    Linux编程基础:1~6章实训编程题
    经管博士科研基础【27】如何判断正定矩阵或者负定矩阵?
    IP地址定位基础数据采集
    关于 @Transactional 注解的类中使用 this 调用问题
    Java练习 day6
    L73.linux命令每日一练 -- 第十章 Linux网络管理命令 -- dig和host
    1592 例题1 国王(Sgu223 LOJ10170 LUOGU1896 提高+/省选-) 暴力思考 状压DP 01背包
    【已解决】设置SSH主机:VS Code-正在本地下载 VS Code 服务器
    hypermesh常用快捷键
  • 原文地址:https://blog.csdn.net/qq_43753724/article/details/126293320