背景简介
要深入理解卷积神经网络的结构,我们需要追根溯源,只有这样才能更好的理解 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. 模型介绍
上图是 LeCun 原论文中 LeNet-5 的结构图。
- 卷积层 C1
Conv2D(filters=6, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
- 池化层,用的是平均池化 S1
AveragePooling2D(pool_size=(2, 2), stride=(2, 2), padding=None)
- 卷积层 C3
Conv2D(filters=16, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
- 池化层,用的是平均池化 S4
AveragePooling2D(pool_size=(2, 2), stride=(2, 2), padding=None)
- 卷积层 C5 或者FC_1
Conv2D(filters=120, kernel_size=(5, 5), padding=None, stride=(1, 1), activation='tanh')
# 或者理解成
Flatten()
Dense(120, activation='tanh')
- F6
Dense(84, activation='tanh')
- OUTPUT
Dense(10, activation='softmax')
个人理解
- 这是后来典型的结构
卷积-->池化-->卷积-->池化-->全连接-->全连接(softmax) - LeNet-5 卷积核的大小是5x5,现在3x3,5x5和7x7都有
- 没有用 padding 技术,对图片边缘的信息处理不够
- 池化为了加快收敛,防止过拟合。池化用的是平均池化 average_pooling, 当下主要是最大值池化 max_pooling
- 激活函数用的 tanh, 当下主要用 relu,因为 relu 收敛更快
- filters 没一步都在增大,主要是为了避免丢失信息。用多个不同的 kernel 去学习前一层 feature map 中的特征
- 训练的时候用到了数据增强 augmentation
- 优化器,应该是用的 SGD
- 没有 dropout 技术
- 模型较小,学的特征不够多,无法处理较大较复杂的数据集。
模型讲解
- 英文
- 图文并茂
- Keras 代码实现
https://engmrk.com/lenet-5-a-classic-cnn-architecture/
Kaggle教程
- 数据: Digit Recognizer
- 框架: Keras
https://www.kaggle.com/vsmolyakov/lenet-cnn