卷积神经网络结构——LeNet-5(卷积神经网络入门,Keras代码实现)

背景简介

要深入理解卷积神经网络的结构,我们需要追根溯源,只有这样才能更好的理解 CNN 网络。

1998年 LeCun 和 Bengio 等人利用 LeNet-5 网络在手写体数字识别领域上的识别效果超过了传统方法,从此开启了卷积神经网络的在图像上的应用大门。据说,一开始美国银行的手写体数字识别就是用的这个算法。

原论文

Gradient -Based Learing Applied to Document Recognition
http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf
论文有点长,46页,估计很难读下来。

官方模型演示

LeCun 做了一些网页展示,有兴趣可以去浏览。
http://yann.lecun.com/exdb/lenet/

个人 github 实现

https://github.com/uestcsongtaoli/LeNet-5

个人理解

1. 模型介绍

卷积神经网络结构——LeNet-5(卷积神经网络入门,Keras代码实现)_第1张图片
上图是 LeCun 原论文中 LeNet-5 的结构图。

  1. 卷积层 C1
Conv2D(filters=6, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
  1. 池化层,用的是平均池化 S1
AveragePooling2D(pool_size=(2, 2), stride=(2, 2), padding=None)
  1. 卷积层 C3
Conv2D(filters=16, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
  1. 池化层,用的是平均池化 S4
AveragePooling2D(pool_size=(2, 2), stride=(2, 2), padding=None)
  1. 卷积层 C5 或者FC_1
Conv2D(filters=120, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
# 或者理解成
Flatten()
Dense(120, activation='tanh')
  1. F6
Dense(84, activation='tanh')
  1. OUTPUT
Dense(10, activation='softmax')

个人理解

  1. 这是后来典型的结构
    卷积–>池化–>卷积–>池化–>全连接–>全连接(softmax)
  2. LeNet-5 卷积核的大小是5x5,现在3x3,5x5和7x7都有
  3. 没有用 padding 技术,对图片边缘的信息处理不够
  4. 池化为了加快收敛,防止过拟合。池化用的是平均池化 average_pooling, 当下主要是最大值池化 max_pooling
  5. 激活函数用的 tanh, 当下主要用 relu,因为 relu 收敛更快
  6. filters 没一步都在增大,主要是为了避免丢失信息。用多个不同的 kernel 去学习前一层 feature map 中的特征
  7. 训练的时候用到了数据增强 augmentation
  8. 优化器,应该是用的 SGD
  9. 没有 dropout 技术
  10. 模型较小,学的特征不够多,无法处理较大较复杂的数据集。

模型讲解

  1. 英文
  2. 图文并茂
  3. Keras 代码实现
    https://engmrk.com/lenet-5-a-classic-cnn-architecture/

Kaggle教程

  1. 数据: Digit Recognizer
  2. 框架: Keras
    https://www.kaggle.com/vsmolyakov/lenet-cnn

你可能感兴趣的:(计算机视觉,算法)