【經典卷積網絡】LeNet-5網絡解析

LeNet5網絡較小,包含深度學習基本模塊:卷積層,池化層,全連接層。

 

該網絡共有7層,不包含輸入,每層都包含可訓練參數;每個層有多個Feature Map,每個FeatureMap

通過一種卷積濾波器提取輸入的一種特徵,然後每個FeatureMap有多個神經元。

各層參數詳解:

1.input層

將輸入圖像的尺寸統一歸一化爲32*32。該網絡一般用於mnist手寫數據集,只有圖片爲單通道。

2.c1層-卷積層

輸入圖片:32*32

卷積核大小:5*5

步長:1

卷積核種類:6

輸出featuremap大小:28*28,計算方法:(32-5+1)/1 = 28

(Input-kernel_size+1)/stride

神經元數量:28*25*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個參數,主要是通過權值共享實現的。

3.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個連接。

4、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個連接。

5.s4層-池化層(下采樣層)

輸入:10*10

採樣區域:2*2

採樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid

採樣種類:16

輸出featureMap大小:5*5(10/2)

神經元數量:5*5*16=40

可訓練參數: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層類似。

6.c5層-卷積層

輸入:s4層的全部16個單元特徵map(與s4全連接)

卷積核大小:5*5

卷積核種類:120

輸出featuremap大小:1*1(5-5+1)

可訓練參數/連接:120*(160*5*5+1) = 48120

詳細說明:C5層是一個卷積層。由於S4層的16個圖的大小爲5x5,與卷積核的大小相同,所以卷積後形成的圖的大小爲1x1。這裏形成120個卷積結果。每個都與上一層的16個圖相連。所以共有(5x5x16+1)x120 = 48120個參數,同樣有48120個連接。

 

7.F6層-全連接層

輸入:120維向量

計算方式:計算輸入向量核權重向量之間的點積,再加上一個偏置,結果通過sigmoid函數輸出

訓練參數:84*(120+1)=10164

8.output層-全連接層

共有10個節點,分別代表數字0~9,且如果節點i的值爲0,則網絡識別的結果是數字i。採用的是徑向基函數(RBF)的網絡連接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:

pytorch代碼示例:

	class LeNet(nn.Module):
	    def __init__(self):
	        super(LeNet,self).__init__()
	        self.conv1 = nn.Sequential(
	            nn.Conv2d(1,6,3),
	            nn.MaxPool2d(2,2)
	        )
	        self.conv2 = nn.Sequential(
	            nn.Conv2d(6,16,5),
	            nn.MaxPool2d(2,2)
	        )
	        self.dense = nn.Sequential(
	            nn.Linear(400,120),
	            nn.Linear(120,84),
	            nn.Linear(84,10)
	        )
	    def forward(self,x):
	        conv1_out = self.conv1(x)
	        conv2_out = self.conv2(conv1_out)
	        res = conv2_out.view(conv2_out.size(0), -1)
	        out = self.dense(res)
            return out

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章