溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet

發(fā)布時(shí)間:2021-10-11 13:40:50 來源:億速云 閱讀:189 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet”,在日常操作中,相信很多人在什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

目錄
  • LeNet

  • 模型訓(xùn)練

在本節(jié)中,我們將介紹LeNet,它是最早發(fā)布的卷積神經(jīng)網(wǎng)絡(luò)之一。這個(gè)模型是由AT&T貝爾實(shí)驗(yàn)室的研究院Yann LeCun在1989年提出的(并以其命名),目的是識(shí)別手寫數(shù)字。當(dāng)時(shí),LeNet取得了與支持向量機(jī)性能相媲美的成果,成為監(jiān)督學(xué)習(xí)的主流方法。LeNet被廣泛用于自動(dòng)取款機(jī)中,幫助識(shí)別處理支票的數(shù)字。

LeNet

總體來看,LeNet(LeNet-5)由兩個(gè)部分組成:

  • 卷積編碼器: 由兩個(gè)卷積層組成

  • 全連接層密集快: 由三個(gè)全連接層組成

什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet

每個(gè)卷積塊中的基本單元是一個(gè)卷積層、一個(gè)sigmoid激活函數(shù)和平均池化層。這里,雖然ReLU和最大池化層更有效,但它們在20世紀(jì)90年代還沒有出現(xiàn)。每個(gè)卷積層使用 5 × 5 5\times5 5×5卷積核和一個(gè)sigmoid激活函數(shù)。這些層將輸入映射到多個(gè)二維特征輸出,通常同時(shí)增加通道的數(shù)量。第一卷積層有6個(gè)輸出通道,而第二個(gè)卷積層有16個(gè)輸出通道。每個(gè) 2 × 2 2\times2 2×2池操作通過空間下采樣將維數(shù)減少4倍。

為了將卷積塊中的輸出傳遞給稠密塊,我們必須在小批量中戰(zhàn)平每個(gè)樣本。LeNet的稠密快有三個(gè)全連接層,分別有120、84和10個(gè)輸出。因?yàn)槲覀內(nèi)栽趫?zhí)行分類,所以輸出層的10維對(duì)應(yīng)于最后輸出結(jié)果的數(shù)量。

通過下面的LeNet代碼,我們會(huì)相信深度學(xué)習(xí)框架實(shí)現(xiàn)此類模型非常簡單。我們只需要實(shí)例化一個(gè)Sequential塊并將需要的層連接在一起。

import torch
from torch import nn
from d2l import torch as d2l

class Reshape(torch.nn.Module):
	def forward(self, x):
		return x.view(-1, 1, 28, 28)

net = torch.nn.Sequential(
	Reshape(),
	nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
	nn.AvgPool2d(kernel_size=2, stride=2),
	nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
	nn.AvgPool2d(kernel_size=2, stride=2),
	nn.Flatten(),
	nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
	nn.Linear(120, 84), nn.Sigmoid(),
	nn.Linear(84, 10)
)

我們對(duì)原始模型做了一點(diǎn)小改動(dòng),去掉了最后一層的高斯激活。除此之外,這個(gè)網(wǎng)絡(luò)與最初的LeNet-5一致。下面,我們將一個(gè)大小為 28 × 28 28\times28 28×28的單通道(黑白)圖像通過LeNet。通過在每一層打印輸出的形狀,我們可以檢查模型,以確保其操作與我們期望的下圖一致。

什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet

X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32)
for layer in net:
	X = layer(X)
	print(layer.__class__.__name__, 'output shape: \t', X.shape)
Reshape output shape: torch.Size([1, 1, 28, 28])
Conv2d output shape: torch.Size([1, 6, 28, 28])
Sigmoid output shape: torch.Size([1, 6, 28, 28])
AvgPool2d output shape: torch.Size([1, 6, 14, 14])
Conv2d output shape: torch.Size([1, 16, 10, 10])
Sigmoid output shape: torch.Size([1, 16, 10, 10])
AvgPool2d output shape: torch.Size([1, 16, 5, 5])
Flatten output shape: torch.Size([1, 400])
Linear output shape: torch.Size([1, 120])
Sigmoid output shape: torch.Size([1, 120])
Linear output shape: torch.Size([1, 84])
Sigmoid output shape: torch.Size([1, 84])
Linear output shape: torch.Size([1, 10])

請(qǐng)注意,在整個(gè)卷積塊中,與上一層相比,每一層特征的高度和寬度都減小了。第一個(gè)卷積層使用2個(gè)像素的填充,來補(bǔ)償 5 × 5 卷積核導(dǎo)致的特征減少。相反,第二個(gè)卷積層沒有填充,因此高度和寬度都減少了4個(gè)像素。隨著層疊的上升,通道的數(shù)量從輸入時(shí)的1個(gè),增加到第一個(gè)卷積層之后的6個(gè),再到第二個(gè)卷積層之后的16個(gè)。同時(shí),每個(gè)匯聚層的高度和寬度都減半。最后,每個(gè)全連接層減少維度,最終輸出一個(gè)維數(shù)與結(jié)果分類數(shù)相匹配的輸出。

模型訓(xùn)練

現(xiàn)在我們已經(jīng)實(shí)現(xiàn)了LeNet,讓我們看看LeNet在Fashion-MNIST數(shù)據(jù)集上的表現(xiàn)。

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size = batch_size)

雖然卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)較少,但與深度的多層感知機(jī)相比,它們的計(jì)算成本仍然很高,因?yàn)槊總€(gè)參數(shù)都參與更多的乘法。
如果我們有機(jī)會(huì)使用GPU,可以用它加快訓(xùn)練。

到此,關(guān)于“什么是卷積神經(jīng)網(wǎng)絡(luò)LeNet”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI