LetNet5網路結構詳解

dear_queen發表於2020-10-07

LetNet5

在這裡插入圖片描述
這個是其網路結構。
下面我們詳細介紹該網路結構,在此之前,先約定一些稱呼:feature maps(f.maps)是每層網路的特徵圖;stride是卷積核的步長;C1層的特徵圖大小為28×28×6,其中28×28表示特徵圖的高度×寬度,6表示特徵圖的通道數;該層使用的卷積核大小5×5×1×6,表示高度×寬度×輸入通道數×輸出通道數。
首先是輸入層,輸入影像大小統一歸一化為32×32,在正式輸入網路之前,其灰度值也要進行歸一化。
第一個卷積層C1
其經過大小為5×5×1×6的卷積核(stride=1),生成特徵圖為28×28×6,不使用填充,步長為1。輸入的影像是一個單通道的影像,因此,特徵圖的數量就等於卷積核的數量,每個輸出通道都與一個輸入通道相連。C1層包含了5×5×1×6+6=156個可訓練的引數,以及28×28×6=4704個節點,每個節點都是經過一個5×5的卷積和一個偏置項計算所得到的,連線數為5×5+1=26個,所以C1層一共有4704×26=122304個連線。
池化層S2
其首先對C1層輸出中的2×2相鄰的區域求和,再取平均值,然後乘以一個權值和加上一個偏置值,將結果通過Sigmoid函式進行對映。這是一個2×2的取樣核,stride=2,生成特徵圖為14×14×6。注意,這裡的池化層雖然沒有卷積核,但有訓練引數。其包括6×2=12個訓練引數,分別是求和的權重和偏移量,共(4+1)×6×14×14=5880個連線。早期的LeNet5使用平均池化,後來使用最大池化。
卷積層C3
經過大小為5×5×6×16的卷積核(stride=1),其生成特徵圖為10×10×16。其輸入是6個通道,輸出是16個通道,這裡經過了一個編碼,
C3層的前6個特徵圖與S2層相鄰的3個特徵圖相連,接下來的6個特徵圖與S2層相鄰的4個特徵圖相連,再接下來的3個特徵圖與S2層部分不相鄰的4個特徵圖相連,最後一個特徵圖與S2層的所有特徵圖相連。這其實是一個非常主觀的設定,輸出的16個通道並沒有與輸入的每個通道相連。它的設計初衷有兩個:第一是減小計算量;第二是打破對稱性。實際上,在後來的網路設計中,很少會遵循這樣的設計準則。
可以求出C3層有6×(5×5×3+1)+9×(5×5×4+1)+1×(5×5×6+1)=1516個引數,與S2層的連線一共有10×10×1516=151600個。
池化層S4
其經過2×2的取樣核(stride=2),生成特徵圖為5×5×16。S4層有32個可訓練引數、2000個連線。S4層的池化方式與S2層相同,輸入是10×10×16,輸出是5×5×16。S4層一共有16×2=32個引數,與C3層一共有(4+1)×5×5×16=2000個連線。
卷積層C5
它由120個5×5的卷積核組成,每個卷積核都與S4層中每個大小為5×5的特徵圖進行卷積,所以每個C5層的卷積核都會輸出一個1×1的結果,有點類似於全域性平均池化和全連線層,但C5層是一個卷積層而不是一個全連線層,如果這個LeNet5網路的輸入變得更大而其他保持不變,那麼這個輸出將大於1×1。C5層與S4層共有120×(5×5×16+1)=48120個連線。
全連線層F6
它的輸入為1×1×120,輸出為1×1×84,總引數量為120×84。F6層有84×(120+1)=10164個可訓練的連線,84這個數字有當時的設計背景,與ASCII碼錶示的7×12的點陣圖大小相等。F6層將輸入向量與權重向量求點積,然後加上偏置項,用Sigmoid函式產生輸出。
輸出全連線層
其輸入為1×1×84,輸出為1×1×10,總引數量為84×10個,其中10就是分類的類別數。輸出層是由歐式徑向基函式(RBF)組成的。每個輸出對應一個RBF,每個RBF都有84維的輸入向量。每個RBF都有一個輸出,最後輸出層會輸出一個10維的向量。
注意,雖然是分類任務,但這裡並沒有採用現在廣泛使用的Softmax損失,即交叉熵,而採用了一個歐式距離,稱為Gaussian Connection,其等價於一個全連線層加上一個歐式損失層。
LeNet5是早期非常經典的卷積神經網路,也是網路成功商業化的代表,但它的輸入影像太小,加上資料不足,在早期並沒有在除手寫數字識別之外的其他計算機視覺任務上取得大的突破。

摘錄於《深度學習之模型設計》

相關文章