卷积神经网络之 - Lenet
本文建議閱讀時間 10 min
前言
Lenet 是一系列網(wǎng)絡(luò)的合稱,包括 Lenet1 - Lenet5,由 Yann LeCun 等人在 1990 年《Handwritten Digit Recognition with a Back-Propagation Network》中提出,是卷積神經(jīng)網(wǎng)絡(luò)的 HelloWorld。
Lenet5
Lenet 的最終版本是 Lenet5,是一個 7 層的神經(jīng)網(wǎng)絡(luò),包含 3 個卷積層,2 個池化層,1 個全連接層。其中所有卷積層的所有卷積核都為 5x5,步長 strid=1,池化方法都為全局 pooling,激活函數(shù)為 Sigmoid,網(wǎng)絡(luò)結(jié)構(gòu)如下:
代碼復(fù)現(xiàn)
Lenet 網(wǎng)絡(luò)的參數(shù)量,以及每層的輸出特征圖大小如下:
卷積的卷積核都為 5×5 步長 stride=1
輸入是 32×32
-> 6@28*28(卷積 C1) ? 參數(shù):5×5×6+6 =156
-> 6@14*14(池化 S2) ? 參數(shù):偏移量參數(shù) ?2×6
-> 16@10*10(卷積 C3) ?參數(shù):5×5×6×16+16 = 2416 ?# 這里與原始的 LeNet 網(wǎng)絡(luò)有區(qū)別
-> 16@5*5(池化 S4) ? ?參數(shù):偏移量參數(shù) ?2×16
-> 120@1*1(卷積 C5)當(dāng)然,這里也可以認(rèn)為是全連接層(因?yàn)樯弦粚拥玫降奶卣鲌D是 5x5,卷積核也為 5x5) ? 參數(shù):5×5×16×120+120 = 48120
-> 84(全連接 F6) 這個 84 的選取有個背景:與 ASCII 碼表示的 7×12 的位圖大小相等 ?參數(shù):120×84
-> 10 (輸出類別數(shù)) ?參數(shù):84×10
下面我們用 Pytorh 框架實(shí)現(xiàn)一些 Lenet5,實(shí)際代碼會與上面的說明有些差別,并模擬一個輸入進(jìn)行測試。
import?torch import?torch.nn?as?nn import?torch.nn.functional?as?Fclass?LeNet5(nn.Module):def?__init__(self,?num_classes,?grayscale=False):?"""num_classes:?分類的數(shù)量grayscale:是否為灰度圖"""super(LeNet5,?self).__init__()self.grayscale?=?grayscaleself.num_classes?=?num_classesif?self.grayscale:?#?可以適用單通道和三通道的圖像in_channels?=?1else:in_channels?=?3#?卷積神經(jīng)網(wǎng)絡(luò)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),??#?這里把第三個卷積當(dāng)作是全連接層了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)?#?輸出?10probas?=?F.softmax(logits,?dim=1)return?logits,?probasnum_classes?=?10??#?分類數(shù)目 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)最后模擬了一個輸入,輸出一個分類器運(yùn)算后的結(jié)果和 10 個 softmax 概率值
備注:公眾號菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧那些年做的學(xué)術(shù)公益-你不是一個人在戰(zhàn)斗適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請回復(fù)“加群”加入知識星球(4500+用戶,ID:92416895),請回復(fù)“知識星球”喜歡文章,點(diǎn)個在看
總結(jié)
以上是生活随笔為你收集整理的卷积神经网络之 - Lenet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络之 - Alexnet
- 下一篇: 从文本分类来看图卷积神经网络