卷積神經網絡之-Lenet

更多內容請關注『機器視覺 CV


卷積神經網絡之-Lenet

前言

Lenet 是一系列網絡的合稱,包括 Lenet1 - Lenet5,由 Yann LeCun 等人在 1990 年《Handwritten Digit Recognition with a Back-Propagation Network》中提出,是卷積神經網絡的 HelloWorld。

Lenet5

Lenet 的最終版本是 Lenet5,是一個 7 層的神經網絡,包含 3 個卷積層,2 個池化層,1 個全連接層。其中所有卷積層的所有卷積核都為 5x5,步長 strid=1,池化方法都為全局 pooling,激活函數為 Sigmoid,網絡結構如下:

卷積神經網絡之-Lenet

代碼復現

Lenet 網絡的參數量,以及每層的輸出特徵圖大小如下:

  • 卷積的卷積核都為 5×5 步長 stride=1
  • 輸入是 32×32
  • -> 6@28*28(卷積 C1) 參數:5×5×6+6 =156
  • -> 6@14*14(池化 S2) 參數:偏移量參數 2×6
  • -> 16@10*10(卷積 C3) 參數:5×5×6×16+16 = 2416 # 這裡與原始的 LeNet 網絡有區別
  • -> 16@5*5(池化 S4) 參數:偏移量參數 2×16
  • -> 120@1*1(卷積 C5)當然,這裡也可以認為是全連接層(因為上一層得到的特徵圖是 5x5,卷積核也為 5x5) 參數:5×5×16×120+120 = 48120
  • -> 84(全連接 F6) 這個 84 的選取有個背景:與 ASCII 碼錶示的 7×12 的位圖大小相等 參數:120×84
  • -> 10 (輸出類別數) 參數:84×10

下面我們用 Pytorh 框架實現一些 Lenet5,實際代碼會與上面的說明有些差別,並模擬一個輸入進行測試。

<code>import torch
import torch.nn as nn

import torch.nn.functional as F

class LeNet5(nn.Module):
def __init__(self, num_classes, grayscale=False):
"""
num_classes: 分類的數量
grayscale:是否為灰度圖
"""
super(LeNet5, self).__init__()

self.grayscale = grayscale
self.num_classes = num_classes

if self.grayscale: # 可以適用單通道和三通道的圖像
in_channels = 1
else:
in_channels = 3

# 卷積神經網絡
self.features = nn.Sequential(
nn.Conv2d(in_channels, 6, kernel_size=5),
nn.MaxPool2d(kernel_size=2),
nn.Conv2d(6, 16, kernel_size=5),
nn.MaxPool2d(kernel_size=2) # 原始的模型使用的是 平均池化
)
# 分類器
self.classifier = nn.Sequential(
nn.Linear(16*5*5, 120), # 這裡把第三個卷積當作是全連接層了
nn.Linear(120, 84),
nn.Linear(84, num_classes)
)

def forward(self, x):
x = self.features(x) # 輸出 16*5*5 特徵圖
x = torch.flatten(x, 1) # 展平 (1, 16*5*5)
logits = self.classifier(x) # 輸出 10
probas = F.softmax(logits, dim=1)
return logits, probas



num_classes = 10 # 分類數目

grayscale = True # 是否為灰度圖
data = torch.rand((1, 1, 32, 32))
print("input data:\\n", data, "\\n")
model = LeNet5(num_classes, grayscale)
logits, probas = model(data)
print("logits:\\n",logits)
print("probas:\\n",probas)
/<code>

最後模擬了一個輸入,輸出一個分類器運算後的結果和 10 個 softmax 概率值

卷積神經網絡之-Lenet


分享到:


相關文章: