91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Python編程pytorch深度卷積神經網絡AlexNet的示例分析

發布時間:2021-10-11 13:42:52 來源:億速云 閱讀:213 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python編程pytorch深度卷積神經網絡AlexNet的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

2012年,AlexNet橫空出世。它首次證明了學習到的特征可以超越手工設計的特征。它一舉打破了計算機視覺研究的現狀。AlexNet使用了8層卷積神經網絡,并以很大的優勢贏得了2012年的ImageNet圖像識別挑戰賽。

下圖展示了從LeNet(左)到AlexNet(right)的架構。

Python編程pytorch深度卷積神經網絡AlexNet的示例分析

AlexNet和LeNet的設計理念非常相似,但也有如下區別:

  • AlexNet比相對較小的LeNet5要深得多。

  • AlexNet使用ReLU而不是sigmoid作為其激活函數。

 容量控制和預處理

AlexNet通過dropout控制全連接層的模型復雜度,而LeNet只使用了權重衰減。為了進一步擴充數據,AlexNet在訓練時增加了大量的圖像增強數據,如翻轉、裁剪和變色。這使得模型更加健壯,更大的樣本量有效地減少了過擬合。

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

net = nn.Sequential(
	# 這里,我們使用一個11*11的更大窗口來捕捉對象
	# 同時,步幅為4,以減少輸出的高度和寬度
	# 另外,輸出通道的數目遠大于LeNet
	nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
	nn.MaxPool2d(kernel_size=3, stride=2)
	# 減少卷積窗口,使用填充為2來使得輸入與輸出的高和寬一致,且增大輸出通道數
	nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
	nn.MaxPool2d(kernel_size=3, stride=2)
	# 使用三個連續的卷積層和較小的卷積窗口
	# 除了最后的卷積層,輸出通道的數量進一步增加
	# 在前兩個卷積層之后,匯聚層不用于減少輸入的高度和寬度
	nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
	nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
	nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
	nn.MaxPool2d(kernel_size=3, stride=2),
	nn.Flatten(),
	# 這里,全連接層的輸出數量是LeNet中的好幾倍。使用dropout層來減輕過度擬合
	nn.Linear(6400, 4096), nn.ReLU(),
	nn.Dropout(p=0.5),
	nn.Linear(4096, 4096), nn.ReLU(),
	nn.Dropout(p=0.5),
	# 最后是輸出層。由于這里使用Fashion-MNIST,所以用類別數位10
	nn.Linear(4096, 10)
)

我們構造一個高度和寬度都為224的單通道數據,來觀察每一層輸出的形狀。它與上面離得最近的圖中的AlexNet架構相匹配。

X = torch.randn(1, 1, 224, 224)
for layer in net:
	X = layer(X)
	print(layer.__class__.__name__,'Output shape:\t', X.shape)
Conv2d Output shape: torch.Size([1, 96, 54, 54])
ReLU Output shape: torch.Size([1, 96, 54, 54])
MaxPool2d Output shape: torch.Size([1, 96, 26, 26])
Conv2d Output shape: torch.Size([1, 256, 26, 26])
ReLU Output shape: torch.Size([1, 256, 26, 26])
MaxPool2d Output shape: torch.Size([1, 256, 12, 12])
Conv2d Output shape: torch.Size([1, 384, 12, 12])
ReLU Output shape: torch.Size([1, 384, 12, 12])
Conv2d Output shape: torch.Size([1, 384, 12, 12])
ReLU Output shape: torch.Size([1, 384, 12, 12])
Conv2d Output shape: torch.Size([1, 256, 12, 12])
ReLU Output shape: torch.Size([1, 256, 12, 12])
MaxPool2d Output shape: torch.Size([1, 256, 5, 5])
Flatten Output shape: torch.Size([1, 6400])
Linear Output shape: torch.Size([1, 4096])
ReLU Output shape: torch.Size([1, 4096])
Dropout Output shape: torch.Size([1, 4096])
Linear Output shape: torch.Size([1, 4096])
ReLU Output shape: torch.Size([1, 4096])
Dropout Output shape: torch.Size([1, 4096])
Linear Output shape: torch.Size([1, 10])

讀取數據集

在這里將AlexNet直接應用于Fashion-MNIST的識別,但這里有一個問題,那就是Fashion-MNIST圖像的分辨率( 28 × 28 28\times28 28×28像素)低于ImageNet圖像。為了解決這個問題,我們將它們增加到 224 × 224 224\times224 224×224(通常來講這不是一個明智的做法,但我們在這里這樣做是為了有效使用AlexNet結構)。我們使用d2l.load_data_fashion_mnist函數中的resize參數執行此調整。

batch_size = 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)

現在,我們可以開始訓練AlexNet了,與LeNet相比,這里的主要變化是使用更小的學習速率訓練,這是因為網絡更深更廣、圖像分辨率更高,訓練卷積伸進網絡就更昂貴。

lr, num_epochs = 0.01, 10
d2l.train_ch7(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
loss 0.330, train acc 0.879, test acc 0.877
4163.0 examples/sec on cuda:0

Python編程pytorch深度卷積神經網絡AlexNet的示例分析

感謝各位的閱讀!關于“Python編程pytorch深度卷積神經網絡AlexNet的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建水县| 清水县| 乐清市| 晋宁县| 石林| 西丰县| 六盘水市| 丁青县| 察隅县| 汕尾市| 三台县| 石城县| 长宁区| 水富县| 古丈县| 固镇县| 平武县| 綦江县| 巩留县| 灵石县| 阿拉善右旗| 房山区| 武川县| 黄石市| 宁都县| 上杭县| 阿尔山市| 亳州市| 凤翔县| 乡城县| 溆浦县| 平阴县| 玛曲县| 云浮市| 上高县| 浮山县| 大邑县| 隆尧县| 高台县| 南宫市| 吉安县|