深度学习笔记16:CNN经典论文研读之AlexNet及其Tensorflow实现

在 Yann Lecun 提出 Le-Net5 之后的十几年内,由于神经网络本身较差的可解释性以及受限于计算能力的影响,神经网络发展缓慢且在较长一段时间内处于低谷。2012年,深度学习三巨头之一、具有神经网络之父之称的 Geoffrey Hinton 的学生 Alex Krizhevsky 率先提出了 AlexNet,并在当年度的 ILSVRC(ImageNet大规模视觉挑战赛)以显著的优势获得当届冠军,top-5 的错误率降至了 16.4%,相比于第二名 26.2% 的错误率有了极大的提升。这一成绩引起了学界和业界的极大关注,计算机视觉也开始逐渐进入深度学习主导的时代。

首次成功使用作为激活函数,使其在较深的网络上效果超过传统的激活函数,极大的缓解了梯度消失问题。

首次在实践中发挥了的作用,为全连接层添加防止过拟合。

相较于之前 Le-Net5 中采用的平均池化,AlexNet 首次采用了重叠的最大池化,避免了平均池化的模糊化效果。

提出了 LRN 层,对局部神经元的活动创建了竞争机制。

使用多 GPU 进行并行计算。

采用了一定的数据增强手段,一定程度上也缓解了过拟合。

AlexNet 网络结构

AlexNet 不算池化层总共有 8 层,前 5 层为卷积层,其中第一、第二和第五层卷积都包含了一个最大池化层,后三层为全连接层。所以 AlexNet 的简略结构如下:

输入>卷积>池化>卷积>池化>卷积>卷积>卷积>池化>全连接>全连接>全连接>输出

各层的结构和参数如下:

C1层是个卷积层,其输入输出结构如下:

输入: 227 x 227 x 3 滤波器大小: 11 x 11 x 3 滤波器个数:96

输出: 55 x 55 x 96

P1层是C1后面的池化层,其输入输出结构如下:

输入: 55 x 55 x 96 滤波器大小: 3 x 3 滤波器个数:96

输出: 27 x 27 x 96

C2层是个卷积层,其输入输出结构如下:

输入: 27 x 27 x 96 滤波器大小: 5 x 5 x 96 滤波器个数:256

输出: 27 x 27 x 256

P2层是C2后面的池化层,其输入输出结构如下:

输入: 27 x 27 x 256 滤波器大小: 3 x 3 滤波器个数:256

输出: 13 x 13 x 256

C3层是个卷积层,其输入输出结构如下:

输入: 13 x 13 x 256 滤波器大小: 3 x 3 x 256 滤波器个数:384

输出: 13 x 13 x 384

C4层是个卷积层,其输入输出结构如下:

输入: 13 x 13 x 384 滤波器大小: 3 x 3 x 384 滤波器个数:384

输出: 13 x 13 x 384

C5层是个卷积层,其输入输出结构如下:

输入: 13 x 13 x 384 滤波器大小: 3 x 3 x 384 滤波器个数:256

输出: 13 x 13 x 256

P5层是C5后面的池化层,其输入输出结构如下:

输入: 13 x 13 x 256 滤波器大小: 3 x 3 滤波器个数:256

输出: 6 x 6 x 256

F6层是个全连接层,其输入输出结构如下:

输入:6 x 6 x 256

输出:4096

F7层是个全连接层,其输入输出结构如下:

输入:4096

输出:4096

F8层也是个全连接层,即输出层,其输入输出结构如下:

输入:4096

输出:1000

在论文中,输入图像大小为 224 x 224 x 3,实际为 227 x 227 x 3。各层输出采用进行激活。前五层卷积虽然计算量极大,但参数量并不如后三层的全连接层多,但前五层卷积层的作用却要比全连接层重要许多。

AlexNet 在验证集和测试集上的分类错误率表现:

AlexNet 的 tensorflow 实现

我们继续秉持前面关于利用构建卷积神经网络的基本步骤和方法:定义创建输入输出的占位符变量模块、初始化各层参数模块、创建前向传播模块、定义模型优化迭代模型,以及在最后设置输入数据。

定义卷积过程

以上关于搭建 AlexNet 的各个组件我们都已准备好,下面我们利用这些组建创建一个 AlexNet 类来实现 AlexNet。

在上述代码中,我们利用了之前定义的各个组件封装了前向计算过程,从http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/上导入了预训练好的模型权重。这样一来,我们就将 AlexNet 基本搭建好了。

参考资料:

Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.

https://github.com/kratzert/finetune_alexnet_with_tensorflow

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180722B1GEY400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券