背景简介
在 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
模型介绍
上图是 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
- 卷积层 Conv_1
x = Conv_block(x, filters=