背景簡介
要深入理解卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)纵刘,我們需要追根溯源穴翩,只有這樣才能更好的理解 CNN 網(wǎng)絡(luò)犬第。
1998年 LeCun 和 Bengio 等人利用 LeNet-5 網(wǎng)絡(luò)在手寫體數(shù)字識(shí)別領(lǐng)域上的識(shí)別效果超過了傳統(tǒng)方法,從此開啟了卷積神經(jīng)網(wǎng)絡(luò)的在圖像上的應(yīng)用大門芒帕。據(jù)說歉嗓,一開始美國銀行的手寫體數(shù)字識(shí)別就是用的這個(gè)算法。
原論文
Gradient -Based Learing Applied to Document Recognition
http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf
論文有點(diǎn)長背蟆,46頁鉴分,估計(jì)很難讀下來。
官方模型演示
LeCun 做了一些網(wǎng)頁展示带膀,有興趣可以去瀏覽志珍。
http://yann.lecun.com/exdb/lenet/
個(gè)人 github 實(shí)現(xiàn)
https://github.com/uestcsongtaoli/LeNet-5
個(gè)人理解
1. 模型介紹
上圖是 LeCun 原論文中 LeNet-5 的結(jié)構(gòu)圖。
- 卷積層 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')
個(gè)人理解
- 這是后來典型的結(jié)構(gòu)
卷積-->池化-->卷積-->池化-->全連接-->全連接(softmax) - LeNet-5 卷積核的大小是5x5,現(xiàn)在3x3点额,5x5和7x7都有
- 沒有用 padding 技術(shù)舔株,對(duì)圖片邊緣的信息處理不夠
- 池化為了加快收斂,防止過擬合还棱。池化用的是平均池化 average_pooling载慈, 當(dāng)下主要是最大值池化 max_pooling
- 激活函數(shù)用的 tanh, 當(dāng)下主要用 relu珍手,因?yàn)?relu 收斂更快
- filters 沒一步都在增大办铡,主要是為了避免丟失信息。用多個(gè)不同的 kernel 去學(xué)習(xí)前一層 feature map 中的特征
- 訓(xùn)練的時(shí)候用到了數(shù)據(jù)增強(qiáng) augmentation
- 優(yōu)化器琳要,應(yīng)該是用的 SGD
- 沒有 dropout 技術(shù)
- 模型較小寡具,學(xué)的特征不夠多,無法處理較大較復(fù)雜的數(shù)據(jù)集稚补。
模型講解
- 英文
- 圖文并茂
- Keras 代碼實(shí)現(xiàn)
https://engmrk.com/lenet-5-a-classic-cnn-architecture/
Kaggle教程
- 數(shù)據(jù): Digit Recognizer
- 框架: Keras
https://www.kaggle.com/vsmolyakov/lenet-cnn