LeNet-5出自論文Gradient-Based Learning Applied to Document Recognition,是一種用於手寫體字符識別的很是高效的卷積神經網絡。網絡
LeNet5 這個網絡雖然很小,可是它包含了深度學習的基本模塊:卷積層,池化層,全連接層。是其餘深度學習模型的基礎, 這裏咱們對LeNet5進行深刻分析。同時,經過實例分析,加深對與卷積層和池化層的理解。架構
LeNet-5共有7層,不包含輸入,每層都包含可訓練參數;每一個層有多個Feature Map,每一個FeatureMap經過一種卷積濾波器提取輸入的一種特徵,而後每一個FeatureMap有多個神經元。函數
各層參數詳解:學習
一、INPUT層-輸入層編碼
首先是數據 INPUT 層,輸入圖像的尺寸統一歸一化爲32*32。spa
注意:本層不算LeNet-5的網絡結構,傳統上,不將輸入層視爲網絡層次結構之一。3d
二、C1層-卷積層blog
輸入圖片:32*32圖片
卷積核大小:5*5rem
卷積核種類:6
輸出featuremap大小:28*28 (32-5+1)=28
神經元數量:28*28*6
可訓練參數:(5*5+1) * 6(每一個濾波器5*5=25個unit參數和一個bias參數,一共6個濾波器)
鏈接數:(5*5+1)*6*28*28=122304
詳細說明:對輸入圖像進行第一次卷積運算(使用 6 個大小爲 5*5 的卷積核),獲得6個C1特徵圖(6個大小爲28*28的 feature maps, 32-5+1=28)。咱們再來看看須要多少個參數,卷積核的大小爲5*5,總共就有6*(5*5+1)=156個參數,其中+1是表示一個核有一個bias。對於卷積層C1,C1內的每一個像素都與輸入圖像中的5*5個像素和1個bias有鏈接,因此總共有156*28*28=122304個鏈接(connection)。有122304個鏈接,可是咱們只須要學習156個參數,主要是經過權值共享實現的。
三、S2層-池化層(下采樣層)
輸入:28*28
採樣區域:2*2
採樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果經過sigmoid
採樣種類:6
輸出featureMap大小:14*14(28/2)
神經元數量:14*14*6
可訓練參數:2*6(和的權+偏置)
鏈接數:(2*2+1)*6*14*14
S2中每一個特徵圖的大小是C1中特徵圖大小的1/4。
詳細說明:第一次卷積以後緊接着就是池化運算,使用 2*2核 進行池化,因而獲得了S2,6個14*14的 特徵圖(28/2=14)。S2這個pooling層是對C1中的2*2區域內的像素求和乘以一個權值係數再加上一個偏置,而後將這個結果再作一次映射。因而每一個池化核有兩個訓練參數,因此共有2x6=12個訓練參數,可是有5x14x14x6=5880個鏈接。
四、C3層-卷積層
輸入:S2中全部6個或者幾個特徵map組合
卷積核大小:5*5
卷積核種類:16
輸出featureMap大小:10*10 (14-5+1)=10
C3中的每一個特徵map是鏈接到S2中的全部6個或者幾個特徵map的,表示本層的特徵map是上一層提取到的特徵map的不一樣組合
存在的一個方式是:C3的前6個特徵圖以S2中3個相鄰的特徵圖子集爲輸入。接下來6個特徵圖以S2中4個相鄰特徵圖子集爲輸入。而後的3個以不相鄰的4個特徵圖子集爲輸入。最後一個將S2中全部特徵圖爲輸入。
則可訓練參數爲:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516
鏈接數:10*10*1516=151600
詳細說明:第一次池化以後是第二次卷積,第二次卷積的輸出是C3,16個10x10的特徵圖,卷積核大小是 5*5. 咱們知道S2 有6個 14*14 的特徵圖,怎麼從6 個特徵圖獲得 16個特徵圖了? 這裏是經過對S2 的特徵圖特殊組合計算獲得的16個特徵圖。具體以下:
C3的前6個feature map(對應上圖第一個紅框的6列)與S2層相連的3個feature map相鏈接(上圖第一個紅框),後面6個feature map與S2層相連的4個feature map相鏈接(上圖第二個紅框),後面3個feature map與S2層部分不相連的4個feature map相鏈接,最後一個與S2層的全部feature map相連。卷積核大小依然爲5*5,因此總共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516個參數。而圖像大小爲10*10,因此共有151600個鏈接。
C3與S2中前3個圖相連的卷積結構以下圖所示:
上圖對應的參數爲 3*5*5+1,一共進行6次卷積獲得6個特徵圖,因此有6*(3*5*5+1)參數。 爲何採用上述這樣的組合了?論文中說有兩個緣由:1)減小參數,2)這種不對稱的組合鏈接的方式有利於提取多種組合特徵。
五、S4層-池化層(下采樣層)
輸入:10*10
採樣區域:2*2
採樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果經過sigmoid
採樣種類:16
輸出featureMap大小:5*5(10/2)
神經元數量:5*5*16=400
可訓練參數:2*16=32(和的權+偏置)
鏈接數:16*(2*2+1)*5*5=2000
S4中每一個特徵圖的大小是C3中特徵圖大小的1/4
詳細說明:S4是pooling層,窗口大小仍然是2*2,共計16個feature map,C3層的16個10x10的圖分別進行以2x2爲單位的池化獲得16個5x5的特徵圖。這一層有2x16共32個訓練參數,5x5x5x16=2000個鏈接。鏈接的方式與S2層相似。
六、C5層-卷積層
輸入:S4層的所有16個單元特徵map(與s4全相連)
卷積核大小:5*5
卷積核種類:120
輸出featureMap大小:1*1(5-5+1)
可訓練參數/鏈接:120*(16*5*5+1)=48120
詳細說明:C5層是一個卷積層。因爲S4層的16個圖的大小爲5x5,與卷積核的大小相同,因此卷積後造成的圖的大小爲1x1。這裏造成120個卷積結果。每一個都與上一層的16個圖相連。因此共有(5x5x16+1)x120 = 48120個參數,一樣有48120個鏈接。C5層的網絡結構以下:
七、F6層-全鏈接層
輸入:c5 120維向量
計算方式:計算輸入向量和權重向量之間的點積,再加上一個偏置,結果經過sigmoid函數輸出。
可訓練參數:84*(120+1)=10164
詳細說明:6層是全鏈接層。F6層有84個節點,對應於一個7x12的比特圖,-1表示白色,1表示黑色,這樣每一個符號的比特圖的黑白色就對應於一個編碼。該層的訓練參數和鏈接數是(120 + 1)x84=10164。ASCII編碼圖以下:
F6層的鏈接方式以下:
八、Output層-全鏈接層
Output層也是全鏈接層,共有10個節點,分別表明數字0到9,且若是節點i的值爲0,則網絡識別的結果是數字i。採用的是徑向基函數(RBF)的網絡鏈接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:
上式w_ij 的值由i的比特圖編碼肯定,i從0到9,j取值從0到7*12-1。RBF輸出的值越接近於0,則越接近於i,即越接近於i的ASCII編碼圖,表示當前網絡輸入的識別結果是字符i。該層有84x10=840個參數和鏈接。
上圖是LeNet-5識別數字3的過程
LeNet-5是一種用於手寫體字符識別的很是高效的卷積神經網絡。
卷積神經網絡可以很好的利用圖像的結構信息。
卷積層的參數較少,這也是由卷積層的主要特性即局部鏈接和共享權重所決定。
想了解更多的朋友能夠直接私我。(關注主頁有驚喜)
若是你有不一樣看法也可直接在評論下方指教!