Python深度學(xué)習(xí)pytorch卷積神經(jīng)網(wǎng)絡(luò)LeNet
在本節(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è)全連接層組成
每個(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。通過在每一層打印輸出的形狀,我們可以檢查模型,以確保其操作與我們期望的下圖一致。
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])
請注意,在整個(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)練。
這里介紹的卷積神經(jīng)網(wǎng)絡(luò)是一類強(qiáng)大的、為處理圖像數(shù)據(jù)而設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)。
基于卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的模型在計(jì)算機(jī)視覺領(lǐng)域中已經(jīng)占主導(dǎo)地位,當(dāng)今幾乎所有的圖像識(shí)別、對(duì)象檢測或語義分割相關(guān)的問題都是以這種方法為基礎(chǔ)。
卷積神經(jīng)網(wǎng)絡(luò)需要的參數(shù)少于全連接結(jié)構(gòu)的網(wǎng)絡(luò),而且卷積也很容易用GPU并行計(jì)算。
卷積神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)利用自然圖像中一些已知結(jié)構(gòu)的創(chuàng)造性方法。
不變性
卷積神經(jīng)網(wǎng)絡(luò)將空間不變性這一概念系統(tǒng)化,從而基于這個(gè)模型使用較少的參數(shù)來學(xué)習(xí)有用的表示。
現(xiàn)在,我們歸納下幫助我們設(shè)計(jì)適合于計(jì)算機(jī)視覺的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的想法:
1.平移不變性(translation invariance):不管檢測對(duì)象出現(xiàn)在圖像中的哪個(gè)位置,神經(jīng)網(wǎng)絡(luò)的前面幾層應(yīng)該對(duì)相同的圖像區(qū)域具有相似的反映,即為“平移不變性”。
2.局部性(locality):神經(jīng)網(wǎng)絡(luò)的前面幾層應(yīng)該只探索輸入圖像中的局部區(qū)域,而不過度在意圖像中相隔較遠(yuǎn)區(qū)域的關(guān)系,這就是“局部性”原則。最終,在后續(xù)神經(jīng)網(wǎng)絡(luò),整個(gè)圖像級(jí)別上可以集成這些局部特征用于預(yù)測
以上就是Python深度學(xué)習(xí)pytorch卷積神經(jīng)網(wǎng)絡(luò)LeNet的詳細(xì)內(nèi)容,更多關(guān)于pytorch卷積神經(jīng)網(wǎng)絡(luò)LeNet的資料請關(guān)注腳本之家其它相關(guān)文章!
- python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理解析
- python人工智能tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN
- Python卷積神經(jīng)網(wǎng)絡(luò)圖片分類框架詳解分析
- Python編程pytorch深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet詳解
- Python深度學(xué)習(xí)之實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
- Python通過TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識(shí)別
- Python?CNN卷積神經(jīng)網(wǎng)絡(luò)實(shí)戰(zhàn)教程深入講解
相關(guān)文章
10分鐘教你用Python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
今天,我們就來用Python實(shí)現(xiàn)微信的自動(dòng)回復(fù)功能吧,并且把接收到的消息統(tǒng)一發(fā)送到文件助手里面,方便統(tǒng)一查看。感興趣的朋友跟隨小編一起看看吧2018-11-11python PyAutoGUI 模擬鼠標(biāo)鍵盤操作和截屏功能
一款跨平臺(tái)/無依賴的自動(dòng)化測試工具,目測只能控制鼠標(biāo)/鍵盤/獲取屏幕尺寸/彈出消息框/截屏。這篇文章主要介紹了python PyAutoGUI 模擬鼠標(biāo)鍵盤操作和截屏功能,需要的朋友可以參考下2019-08-08Django高并發(fā)負(fù)載均衡實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Django高并發(fā)負(fù)載均衡實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python基礎(chǔ)篇之pandas常用基本函數(shù)匯總
Pandas是一個(gè)python數(shù)據(jù)分析庫,它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)篇之pandas常用基本函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-07-07利用Python讀取Excel表內(nèi)容的詳細(xì)過程
python有多種方式可以去讀取excel文檔的內(nèi)容,下面這篇文章主要給大家介紹了利用Python讀取Excel表內(nèi)容的詳細(xì)過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10python實(shí)現(xiàn)mysql的讀寫分離及負(fù)載均衡
這篇文章主要介紹了python實(shí)現(xiàn)mysql的讀寫分離及負(fù)載均衡 ,需要的朋友可以參考下2018-02-02在Python中使用CasperJS獲取JS渲染生成的HTML內(nèi)容的教程
這篇文章主要介紹了在Python中使用CasperJS獲取JS渲染生成的HTML內(nèi)容的教程,需要先用JavaScript創(chuàng)建一個(gè)接口文件,需要的朋友可以參考下2015-04-04用Python生成N層的楊輝三角的實(shí)現(xiàn)方法
這篇文章主要介紹了用Python生成N層的楊輝三角的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04pytorch:實(shí)現(xiàn)簡單的GAN示例(MNIST數(shù)據(jù)集)
今天小編就為大家分享一篇pytorch:實(shí)現(xiàn)簡單的GAN示例(MNIST數(shù)據(jù)集),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01