一、介紹
LeNet5是由Yann LeCun在1998年提出的,是深度學習領域中非常重要的神經網絡模型。LeNet5是一個卷積神經網絡模型,在當時在手寫數字識別、人臉識別等領域都有應用。該模型的成功啟發了更加複雜的卷積神經網絡的設計,是卷積神經網絡發展史上的重要一步。
二、LeNet5網絡結構
LeNet5是由7層神經網絡組成,分別是輸入層、C1層、S2層、C3層、S4層、F5層和輸出層。下面是LeNet5的網絡結構圖:
輸入層是一張32*32的圖片。接下來的C1層是一個卷積層,包含6個卷積核。在C1層中,6個卷積核會對輸入圖像執行卷積運算,每個卷積核生成一個卷積特徵圖。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 5) # C1 layer
self.pool1 = nn.MaxPool2d(2, 2) # S2 layer
self.conv2 = nn.Conv2d(6, 16, 5) # C3 layer
self.pool2 = nn.MaxPool2d((2,2), (2,2)) # S4 layer
self.fc1 = nn.Linear(16*5*5, 120) # F5 layer
self.fc2 = nn.Linear(120, 84) # F6 layer
self.fc3 = nn.Linear(84, 10) # Output layer
def forward(self, x):
x = F.relu(self.conv1(x))
x = self.pool1(x)
x = F.relu(self.conv2(x))
x = self.pool2(x)
x = x.view(-1, 16*5*5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
output = self.fc3(x)
return output
net = LeNet5()
“`
三、各層功能詳解
1. 卷積核層(C1)
輸入圖片經過C1層後,會得到6個卷積特徵圖,大小為28*28,每個特徵圖的大小是後面第二個池化層S2的大小。C1層使用的卷積核大小是5*5,步長為1,padding為0,輸入通道為1,輸出通道為6,這意味着C1層使用了6個5*5*1的卷積核,每個卷積核都會對輸入圖片做一次卷積運算,將得到的結果映射到對應的卷積特徵圖中。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 5) # C1 layer
…
“`
2. 平均池化層(S2)
在經過C1層後,接下來是平均池化層S2。該層的主要作用是降低相鄰像素間的相關性,減少參數數量,把大尺寸的特徵圖縮小為小尺寸的特徵圖。S2層的大小為14*14,每個特徵圖的大小為14*14。S2層使用的池化窗口大小為2*2,步長也為2*2。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.pool1 = nn.MaxPool2d(2, 2) # S2 layer
…
“`
3. 卷積核層(C3)
C3層對S2層的特徵圖再次進行卷積得到16個卷積特徵圖,C3層使用的卷積核大小是5*5,步長為1,padding為0,輸入通道為S2層的輸出6,輸出通道為16。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.conv2 = nn.Conv2d(6, 16, 5) # C3 layer
…
“`
4. 平均池化層(S4)
在經過C3層後,接下來是平均池化層S4。S4層的大小為5*5,每個特徵圖的大小為5*5。S4層使用的池化窗口大小為2*2,步長也為2*2。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.pool2 = nn.MaxPool2d((2,2), (2,2)) # S4 layer
…
“`
5. 全連接層(F5)
在S4層後面接着一個全連接層F5,對所有的神經元都進行連接,連接方式類似於經典的神經網絡。F5層有120個神經元,接收來自S4層的16個5*5的卷積特徵圖。F5層的輸入是一維的,所以需要把輸入的16個特徵圖展開成一維的向量。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.fc1 = nn.Linear(16*5*5, 120) # F5 layer
…
“`
6. 全連接層(F6)
F6層有84個神經元,接收來自F5層的120個神經元信號。該層主要作用在於增強網絡的非線性,提高網絡的擬合能力。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.fc2 = nn.Linear(120, 84) # F6 layer
…
“`
7. 輸出層
輸出層一般是一個全連接層,每個神經元代表一個類別。
“`python
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
…
self.fc3 = nn.Linear(84, 10) # Output layer
…
“`
四、LeNet5的應用
LeNet5由於其簡潔的網絡結構和很好的性能,被廣泛應用在手寫數字識別等領域。隨着深度學習的發展,卷積神經網絡在圖像識別、目標檢測、語音識別等領域都有很好的應用。可以看到在LeNet5的基礎上,會有更加複雜,更加深層次的卷積神經網絡。
五、總結
LeNet5是在深度學習領域中具有重要意義的卷積神經網絡,其在手寫數字識別等領域都有很好的應用。該網絡模型結構簡潔明了,可以通過加深層數、增加節點等方式對其進行擴展,可以適用於更加複雜的圖像識別任務。
原創文章,作者:ZLES,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131755.html