欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python深度學習pytorch卷積神經(jīng)網(wǎng)絡LeNet

 更新時間:2021年10月11日 14:51:10   作者:Supre_yuan  
這篇文章主要為大家講解了Python深度學習中的pytorch卷積神經(jīng)網(wǎng)絡LeNet的示例解析,有需要的朋友可以借鑒參考下希望能夠有所幫助

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

LeNet

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

  • 卷積編碼器: 由兩個卷積層組成
  • 全連接層密集快: 由三個全連接層組成

在這里插入圖片描述

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

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

通過下面的LeNet代碼,我們會相信深度學習框架實現(xiàn)此類模型非常簡單。我們只需要實例化一個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)
)

我們對原始模型做了一點小改動,去掉了最后一層的高斯激活。除此之外,這個網(wǎng)絡與最初的LeNet-5一致。下面,我們將一個大小為 28 × 28 28\times28 28×28的單通道(黑白)圖像通過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])

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

模型訓練

現(xiàn)在我們已經(jīng)實現(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)絡的參數(shù)較少,但與深度的多層感知機相比,它們的計算成本仍然很高,因為每個參數(shù)都參與更多的乘法。
如果我們有機會使用GPU,可以用它加快訓練。

這里介紹的卷積神經(jīng)網(wǎng)絡是一類強大的、為處理圖像數(shù)據(jù)而設計的神經(jīng)網(wǎng)絡。
基于卷積神經(jīng)網(wǎng)絡結構的模型在計算機視覺領域中已經(jīng)占主導地位,當今幾乎所有的圖像識別、對象檢測或語義分割相關的問題都是以這種方法為基礎。

卷積神經(jīng)網(wǎng)絡需要的參數(shù)少于全連接結構的網(wǎng)絡,而且卷積也很容易用GPU并行計算。

卷積神經(jīng)網(wǎng)絡是機器學習利用自然圖像中一些已知結構的創(chuàng)造性方法。

不變性

卷積神經(jīng)網(wǎng)絡將空間不變性這一概念系統(tǒng)化,從而基于這個模型使用較少的參數(shù)來學習有用的表示。

現(xiàn)在,我們歸納下幫助我們設計適合于計算機視覺的神經(jīng)網(wǎng)絡結構的想法:

1.平移不變性(translation invariance):不管檢測對象出現(xiàn)在圖像中的哪個位置,神經(jīng)網(wǎng)絡的前面幾層應該對相同的圖像區(qū)域具有相似的反映,即為“平移不變性”。
2.局部性(locality):神經(jīng)網(wǎng)絡的前面幾層應該只探索輸入圖像中的局部區(qū)域,而不過度在意圖像中相隔較遠區(qū)域的關系,這就是“局部性”原則。最終,在后續(xù)神經(jīng)網(wǎng)絡,整個圖像級別上可以集成這些局部特征用于預測

以上就是Python深度學習pytorch卷積神經(jīng)網(wǎng)絡LeNet的詳細內(nèi)容,更多關于pytorch卷積神經(jīng)網(wǎng)絡LeNet的資料請關注腳本之家其它相關文章!

相關文章

最新評論