经典卷积神经网络结构——AlexNet网络结构详解(卷积神经网络入门,Keras代码实现)

背景简介

在 LeNet 问世后的第4年,2012年, AlexNet 在 ImageNet LSVRC-2010 数据集上对1000个类别的图像进行分类取得了当时最好的效果;同时在 ILSVRC-2012 数据集上取得了当时第一的成绩。在AlexNet之后,图像分类模型越来越复杂,网络也越来越 deep。现在 AlexNet 仍然可以应用到小数据集上,做一些验证性的实验。

原论文

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
文章发在 NIPS 上。截止目前引用次数为36782!

个人 Github 实现

https://github.com/uestcsongtaoli/AlexNet

模型介绍

AlexNet Architecture

上图是 Alex Krizhevsky 原论文中 AlexNet 结构图,做了简单的标注。
该模型由5个卷积层和3个全连接层构成,其中还有3个 Pooling 层。
先定义 conv block 包括卷积、BatchNormalization 和 Activation:

def Conv_block(layer, filters, kernerl_size=(3, 3), strides=(1, 1), padding="valid", name=None):
    x = Conv2D(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, name=name)(layer)
    x = BatchNormalization()(x)
    x = Activation("relu")(x)
    return x
  1. 卷积层 Conv_1
x = Conv_block(x, filters=96, kernel_size=(11, 11), strides=(4, 4), padding="valid", name="Conv_1_96_11x11_4")
  1. 池化层 Pool_1
x = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding="valid", name="maxpool_1_3x3_2")(x)
  1. 卷积层 Conv_2
x = Conv_block(x, filters=256, kernel_size=(5, 5), strides=(1, 1), padding="same", name="Conv_2_256_5x5_1")
  1. 池化层 Pool_2
x = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding="valid", name="maxpool_2_3x3_2")(x)
  1. 卷积层 Conv_3
x = Conv_block(x, filters=384, kernel_size=(3, 3), strides=(1, 1), padding="same", name="Conv_3_384_3x3_1")
  1. 卷积层 Conv_4
x = Conv_block(x, filters=384, kernel_size=(3, 3), strides=(1, 1), padding="same", name="Conv_4_384_3x3_1")
  1. 卷积层 Conv_5
x = Conv_block(x, filters=256, kernel_size=(3, 3), strides=(1, 1), padding="same", name="Conv_5_256_3x3_1")
  1. 池化层 Pool_2
x = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding="valid", name="maxpool_3_3x3_2")(x)
  1. 全连接层 FC_1
x = Flatten()(x)
x = dense(units=4096)(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
  1. 全连接层 FC_2
x = dense(units=4096)(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
  1. 全连接层 FC_3
x = dense(units=num_classes)(x)
x = BatchNormalization()(x)
x = Activation("softmax")(x)

个人理解

  1. 这里实现的时候有个trick, 输入图片大小应该是227,这样通过计算卷积之后才是55x55的大小,所以我在实现的时候先加了 zero_padding 具体参见我Github 的代码。
  2. AlexNet 网络参数的大约是6千万个左右。
  3. AlexNet 之后网络的激活函数基本都使用 relu, 因为 relu 收敛更快,没有梯度消失问题。
  4. 池化也大多使用最大值池化 max pooling.
  5. 增加了 Batchnormalization 技术,更快收敛、类似正则化的作用,减小过拟合。
  6. 原文中还有 Dropout 技术,来防止过拟合,多用于全连接层
  7. 优化器是 SGD.
  8. 当时设置的 batch_size 为 128
  9. 采用了 group convolution 技术,也就是分块卷积,是一种模型并行的技术。受限于当时的技术资源,作者将卷积部分均分成两部分。优点是:1. 收敛快,每次可以接收更多图片,2. 参数少,3. 每一个 filter group 可以学习到数据不同的特征。

模型讲解

  1. ImageNet Classification with Deep Convolutional Neural Networks
    http://vision.stanford.edu/teaching/cs231b_spring1415/slides/alexnet_tugce_kyunghee.pdf
  2. Understanding AlexNet
    https://www.learnopencv.com/understanding-alexnet/
  3. A Walk-through of AlexNet
    https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637
  4. AlexNet
    为什么使用ReLu
    http://cvml.ist.ac.at/courses/DLWT_W17/material/AlexNet.pdf
  5. AlexNet Implementation Using Keras
    https://engmrk.com/alexnet-implementation-using-keras/
  6. AlexNet Keras Implementation
    Github
    https://github.com/eweill/keras-deepcv/blob/master/models/classification/alexnet.py
  7. Plant Diseases Classification Using AlexNet
    Kaggle 应用
    https://www.kaggle.com/vipoooool/plant-diseases-classification-using-alexnet
  8. Finetuning AlexNet with TensorFlow
    迁移学习,fine-tune
    https://kratzert.github.io/2017/02/24/finetuning-alexnet-with-tensorflow.html
  9. AlexNet implementation + weights in TensorFlow
    模型的权重,用于迁移学习
    http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容