Python編程pytorch深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet詳解
2012年,AlexNet橫空出世。它首次證明了學(xué)習(xí)到的特征可以超越手工設(shè)計(jì)的特征。它一舉打破了計(jì)算機(jī)視覺研究的現(xiàn)狀。AlexNet使用了8層卷積神經(jīng)網(wǎng)絡(luò),并以很大的優(yōu)勢贏得了2012年的ImageNet圖像識別挑戰(zhàn)賽。
下圖展示了從LeNet(左)到AlexNet(right)的架構(gòu)。

AlexNet和LeNet的設(shè)計(jì)理念非常相似,但也有如下區(qū)別:
- AlexNet比相對較小的LeNet5要深得多。
- AlexNet使用ReLU而不是sigmoid作為其激活函數(shù)。
容量控制和預(yù)處理
AlexNet通過dropout控制全連接層的模型復(fù)雜度,而LeNet只使用了權(quán)重衰減。為了進(jìn)一步擴(kuò)充數(shù)據(jù),AlexNet在訓(xùn)練時(shí)增加了大量的圖像增強(qiáng)數(shù)據(jù),如翻轉(zhuǎn)、裁剪和變色。這使得模型更加健壯,更大的樣本量有效地減少了過擬合。
import torch from torch import nn from d2l import torch as d2l net = nn.Sequential( # 這里,我們使用一個(gè)11*11的更大窗口來捕捉對象 # 同時(shí),步幅為4,以減少輸出的高度和寬度 # 另外,輸出通道的數(shù)目遠(yuǎn)大于LeNet nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2) # 減少卷積窗口,使用填充為2來使得輸入與輸出的高和寬一致,且增大輸出通道數(shù) nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2) # 使用三個(gè)連續(xù)的卷積層和較小的卷積窗口 # 除了最后的卷積層,輸出通道的數(shù)量進(jìn)一步增加 # 在前兩個(gè)卷積層之后,匯聚層不用于減少輸入的高度和寬度 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(), # 這里,全連接層的輸出數(shù)量是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,所以用類別數(shù)位10 nn.Linear(4096, 10) )
我們構(gòu)造一個(gè)高度和寬度都為224的單通道數(shù)據(jù),來觀察每一層輸出的形狀。它與上面離得最近的圖中的AlexNet架構(gòu)相匹配。
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])
讀取數(shù)據(jù)集
在這里將AlexNet直接應(yīng)用于Fashion-MNIST的識別,但這里有一個(gè)問題,那就是Fashion-MNIST圖像的分辨率( 28 × 28 28\times28 28×28像素)低于ImageNet圖像。為了解決這個(gè)問題,我們將它們增加到 224 × 224 224\times224 224×224(通常來講這不是一個(gè)明智的做法,但我們在這里這樣做是為了有效使用AlexNet結(jié)構(gòu))。我們使用d2l.load_data_fashion_mnist函數(shù)中的resize參數(shù)執(zhí)行此調(diào)整。
batch_size = 128 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
現(xiàn)在,我們可以開始訓(xùn)練AlexNet了,與LeNet相比,這里的主要變化是使用更小的學(xué)習(xí)速率訓(xùn)練,這是因?yàn)榫W(wǎng)絡(luò)更深更廣、圖像分辨率更高,訓(xùn)練卷積伸進(jìn)網(wǎng)絡(luò)就更昂貴。
lr, num_epochs = 0.01, 10 d2l.train_ch6(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深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet詳解的詳細(xì)內(nèi)容,更多關(guān)于pytorch卷積神經(jīng)網(wǎng)絡(luò)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python簡單檢測文本類型的2種方法【基于文件頭及cchardet庫】
這篇文章主要介紹了Python簡單檢測文本類型的方法,結(jié)合實(shí)例形式分析了基于基于文件頭及cchardet庫兩種文本類型檢測的方法,需要的朋友可以參考下2016-09-09
py3nvml實(shí)現(xiàn)GPU相關(guān)信息讀取的案例分析
這篇文章主要介紹了py3nvml實(shí)現(xiàn)GPU相關(guān)信息讀取,此時(shí)就可以考慮使用py3nvml這樣的工具,針對于GPU任務(wù)執(zhí)行的過程進(jìn)行細(xì)化的分析,有助于提升GPU的利用率和程序執(zhí)行的性能,需要的朋友可以參考下2022-01-01
python判斷計(jì)算機(jī)是否有網(wǎng)絡(luò)連接的實(shí)例
今天小編就為大家分享一篇python判斷計(jì)算機(jī)是否有網(wǎng)絡(luò)連接的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python實(shí)現(xiàn)圖片處理和特征提取詳解
這篇文章主要介紹了python實(shí)現(xiàn)圖片處理和特征提取詳解,文中向大家分享了Python導(dǎo)入圖片,將圖像轉(zhuǎn)化為二維矩陣,模糊化圖片等Python對圖像的操作,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

