PyTorch與深度學習實戰(zhàn) 課件 第3-5章 PyTorch深度學習基礎(chǔ)、手寫漢字識別、文本生成_第1頁
PyTorch與深度學習實戰(zhàn) 課件 第3-5章 PyTorch深度學習基礎(chǔ)、手寫漢字識別、文本生成_第2頁
PyTorch與深度學習實戰(zhàn) 課件 第3-5章 PyTorch深度學習基礎(chǔ)、手寫漢字識別、文本生成_第3頁
PyTorch與深度學習實戰(zhàn) 課件 第3-5章 PyTorch深度學習基礎(chǔ)、手寫漢字識別、文本生成_第4頁
PyTorch與深度學習實戰(zhàn) 課件 第3-5章 PyTorch深度學習基礎(chǔ)、手寫漢字識別、文本生成_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章

PyTorch深度學習基礎(chǔ)13.2

循環(huán)神經(jīng)網(wǎng)絡(luò)目錄3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)23.3生成對抗網(wǎng)絡(luò)31.LeNet52.AlexNet3.

VGGNet4.

GoogLeNet5.

ResNet3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.LeNet5

LeNet5是楊立昆(YannLeCun)在1998年設(shè)計的用于手寫數(shù)字識別的卷積神經(jīng)網(wǎng)絡(luò),當年大多數(shù)銀行就是用LeNet5來識別支票上面的手寫數(shù)字的,是早期卷積神經(jīng)網(wǎng)絡(luò)中最有代表性的實驗系統(tǒng)之一。LeNet5共有7層(不包括輸入層),每層都包含不同數(shù)量的訓練參數(shù),其網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.AlexNet

AlexNet于2012年由阿萊克斯·克里澤夫斯基(AlexKrizhevsky),伊爾亞?蘇茨克維(IlyaSutskever)和杰弗里·辛頓(GeoffreyHinton)等人提出,并贏得了2012屆圖像識別大賽的冠軍,使得CNN成為在圖像分類上的核心算法模型。AlexNet網(wǎng)絡(luò)一共分為11層,含5個卷積層以及3個全連接層,除此之外還有3個池化層。在每一個卷積層中包含了激活函數(shù)RELU以及局部響應歸一化(LRN)處理,然后經(jīng)過降采樣(池化處理)。其網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.AlexNet

圖中輸入的圖片尺寸為256×256,然后對輸入的圖片進行隨機裁剪得到227×227大小的圖片,將圖片輸入進網(wǎng)絡(luò)中,最后得到1000個分布區(qū)間為(0,1)的數(shù)的輸出,代表輸入樣本的所屬類別的概率。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.

VGGNet

VGGNet(VisualGeometryGroup)于2014年由牛津大學的凱倫·西蒙揚(KarenSimonyan)和安德魯·齊瑟曼(AndrewZisserman)提出,主要特點是“簡潔與深度”。簡潔是指它的結(jié)構(gòu)一律采用步長(stride)為1的3×3的卷積核(filter),以及步長為2的2×2的最大池化(MaxPooling),深度則是因為VGGNet能夠達到19層。

VGGNet一共有6種不同的網(wǎng)絡(luò)結(jié)構(gòu),每種結(jié)構(gòu)都含有5組卷積,每組卷積都使用3×3的卷積核,每組卷積后進行一個2×2的最大池化,然后是3個全連接層。VGGNet的示意圖如圖所示,其中網(wǎng)絡(luò)結(jié)構(gòu)D就是著名的VGG16,網(wǎng)絡(luò)結(jié)構(gòu)E就是著名的VGG19。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.

VGGNetVGGNet在訓練時,先訓練級別A的簡單網(wǎng)絡(luò),再復用A網(wǎng)絡(luò)的權(quán)重來初始化后面的復雜模型,加快訓練收斂的速度。在預測時,VGGNet采用Multi-Scale(多尺幅目標檢測)的方法,先將圖像的尺寸變換為Q,并將變換后的圖片輸入卷積網(wǎng)絡(luò)計算;然后在最后一個卷積層使用滑窗的方式進行分類預測,將不同窗口的分類結(jié)果平均,并將不同尺寸Q的結(jié)果平均后得到最后結(jié)果,能夠提高圖片數(shù)據(jù)的利用率并提升預測準確率。并且在訓練過程中,VGGNet也使用了Multi-Scale的方法做數(shù)據(jù)增強,將原始圖像縮放到不同尺寸S,然后再隨機裁切成224×224的圖片增加數(shù)據(jù)量,防止模型過擬合。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)4.

GoogLeNet

GoogLeNet是2014年由克里斯提·魯布托(ChristianLouboutin)提出的一種全新的深度學習網(wǎng)絡(luò)結(jié)構(gòu),在這之前的AlexNet、VGG等結(jié)構(gòu)都是通過增大網(wǎng)絡(luò)的深度(層數(shù))來獲得更好的訓練效果,但層數(shù)的增加會帶來很多負作用,如過擬合、梯度消失、梯度爆炸等。網(wǎng)絡(luò)寬度(inception)則從另一種角度來提升訓練結(jié)果,能更高效地利用計算資源,在相同的計算量下能提取到更多的特征。GoogLeNet的inception結(jié)構(gòu)如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)5.

ResNet

隨著層數(shù)的增加,CNN的效果會遇到瓶頸,甚至會不增反降。ResNet于2015年由微軟亞洲研究院的學者們提出,主要是為了解決這個問題,幫助訓練更深的網(wǎng)絡(luò)。ResNet引入了一個殘差塊(residualblock)的結(jié)構(gòu),如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.1

常用卷積神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.卷積層2.池化層3.

全連接層4.

歸一化層5.

丟棄層3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

卷積神經(jīng)網(wǎng)絡(luò)的卷積層由若干卷積單元組成,反向傳播算法會對每個卷積單元的參數(shù)做優(yōu)化處理。卷積運算的目的是提取輸入的不同特征,第一層卷積層只能提取一些簡單的特征如邊緣、線條和角等,后續(xù)更深層的網(wǎng)絡(luò)能從簡單特征中迭代提取更為復雜的特征。下面將介紹卷積層的局部連接和權(quán)值共享兩個基本特性,然后介紹卷積的實現(xiàn)過程。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(1)局部連接

局部連接指的是卷積層的節(jié)點僅僅和其前一層的部分節(jié)點相連接,只用于學習局部特征。局部連接的理念來源于動物視覺的皮層結(jié)構(gòu),也就是動物視覺的神經(jīng)元在感知外界物體的過程中起作用的只有一部分神經(jīng)元。在計算機視覺中,圖像中的某一塊區(qū)域像素之間的相關(guān)性與像素之間的距離相關(guān),距離較近的像素間相關(guān)性強,距離較遠則相關(guān)性較弱。因此,采用部分神經(jīng)元接受圖像信息,然后通過綜合全部的圖像信息達到增強圖像信息的目的。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(1)局部連接

第n+1層的每個節(jié)點只與第n層中的3個節(jié)點相連接,而不是與第n層的5個神經(jīng)元節(jié)點都相連,原本需要15(5×3=15)個權(quán)值參數(shù),現(xiàn)在只需要9(3×3=9)個權(quán)值參數(shù),減少了40%的參數(shù)量。這種局部連接的方式減少了參數(shù)數(shù)量,加快了學習速率,同時也在一定程度上減少了過擬合的可能。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(2)權(quán)值共享

卷積層的另一特性是權(quán)值共享。比如一個3×3的卷積核,共有9個參數(shù),該卷積核會和輸入圖片的不同區(qū)域作卷積,用于檢測相同的特征。不同的卷積核對應不同的權(quán)值參數(shù),用于檢測不同的特征。權(quán)值共享的示意圖如圖所示。

一共只有3組不同的權(quán)值,如果只使用局部連接,共需要3×4=12個權(quán)值參數(shù),在局部連接的基礎(chǔ)上再引入權(quán)值共享,便僅僅需要3個權(quán)值,能夠進一步地減少參數(shù)數(shù)量。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(3)卷積的實現(xiàn)過程

在局部感知和權(quán)值共享的基礎(chǔ)上,網(wǎng)絡(luò)中的每一層的計算操作是輸入層和權(quán)重的卷積,卷積神經(jīng)網(wǎng)絡(luò)的名字因此而來。

設(shè)定一個大小為5×5的圖像和一個3×3的卷積核。此處的卷積核共有9個參數(shù),記為

。這種情況下,卷積核實際上有9個神經(jīng)元,它們的輸出又組成一個3×3的矩陣,稱為特征圖。卷積的過程如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(3)卷積的實現(xiàn)過程

第一個神經(jīng)元連接到圖像的第一個3×3的局部,第二個神經(jīng)元則滑動連接到第二個3×3的局部,總共需要滑動8次。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型

PyTorch框架中常用的用于構(gòu)建卷積層的類如下。①Conv2d二維卷積(濾波)是圖像處理的一個常用操作,可以提取圖像的邊緣特征、去除噪音等。離散二維卷積的公式如式所示。其中,為二維輸入圖像,為卷積核,為得到的卷積結(jié)果在坐標處的數(shù)值。遍歷m和n時,可能會超出圖像I的邊界,所以要對圖像I進行邊界延拓,或者限制i和j的下標范圍。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型

PyTorch框架中常用的用于構(gòu)建卷積層的類如下。①Conv2d二維卷積的計算過程如圖所示。原始圖片大小為5×5,卷積核是一個大小為3×3的一個矩陣,所得到的卷積結(jié)果的大小為3×3。卷積核從左到右、從上到下依次對圖片中相應的3×3的區(qū)域做內(nèi)積,每次滑動一個像素。例如,卷積結(jié)果中的左下角框標記的“2”,是通過原始圖片中的3×3的區(qū)域的像素值和卷積核做內(nèi)積得到的,計算過程如下。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型①Conv2dConv2d類的語法格式如下。

torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros')Conv2d類創(chuàng)建一個卷積核,該卷積核對層輸入進行卷積,以生成輸出張量。如果參數(shù)bias的值為True,則會創(chuàng)建一個偏置向量并將其添加到輸出中。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型①Conv2d

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明in_channels接收int,表示輸入通道數(shù),無默認值out_channels接收int,表示輸出通道數(shù),無默認值kernel_size接收int或tuple,表示卷積核尺寸,無默認值stride接收int或tuple,表示卷積操作的步幅,默認為1padding接收int或tuple,表示用于在輸入數(shù)據(jù)中填充的層數(shù),默認為0dilation接收int或tuple,表示卷積核內(nèi)部各點的間距,默認為1groups接收int,表示控制輸入和輸出之間的連接;group=1,輸出是所有輸入的卷積;group=2,此時相當于有并排的兩個卷積層,每個卷積層計算輸入通道的一半,并且產(chǎn)生的輸出是輸出通道的一半,隨后將這兩個輸出連接起來,默認為1bias接收bool,為true表示對輸出添加可學習的偏置量,默認為Truepadding_mode接收str,表示填充模式,默認為'zeros'1.卷積層

(4)PyTorch框架中的常用卷積類型②ConvTranspose2d轉(zhuǎn)置卷積(Conv2dTranspose)在CNN中常用于對特征圖進行上采樣。Conv2dTranspose對普通卷積操作中的卷積核做轉(zhuǎn)置處理,將普通卷積的輸出作為轉(zhuǎn)置卷積的輸入,而轉(zhuǎn)置卷積的輸出即普通卷積的輸入。轉(zhuǎn)置卷積形式上和卷積層的反向梯度計算相同。圖中是一個卷積核大小為3×3,步長為2,填充值(padding)為1的普通卷積。卷積核在虛線框位置時輸出元素1,在實線框位置時輸出元素2。輸入元素a僅和輸出元素1有運算關(guān)系,而輸入元素b和輸出元素1、2均有關(guān)系。同理c只和一個元素2有關(guān),而d和1、2、3和4四個元素都有關(guān)。在進行轉(zhuǎn)置卷積時,依然應該保持這個連接關(guān)系不變。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型②ConvTranspose2d

轉(zhuǎn)置卷積的計算過程如圖所示。需要將上頁圖中右邊的特征圖作為輸入,左邊中間的特征圖作為輸出,并且保證連接關(guān)系不變。即a只和1有關(guān),b和1與2兩個元素有關(guān),其他以此類推。先用數(shù)值0給左邊的特征圖做插值,使相鄰兩個元素的間隔為卷積的步長值即插值的個數(shù),同時邊緣也需要進行與插值數(shù)量相等的補0。這時卷積核的滑動步長就不再是2,而是1,步長值體現(xiàn)在插值補0的過程中。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型②ConvTranspose2d

ConvTranspose2d類的語法格式如下。

torch.nn.ConvTranspose2d(in_channels,out_channels,kernel_size,stride=1,padding=0,output_padding=0,groups=1,bias=True,dilation=1,padding_mode='zeros')

ConvTranspose2d類的常用參數(shù)及其說明與Conv2d類一致。增加的參數(shù)output_padding接收int或tuple,表示對輸出的hw填充的層數(shù)。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型③Conv3d

三維卷積Conv3d的計算過程如圖所示。注意,這里只有一個輸入通道,一個輸出通道,一個三維的卷積算子(3×3×3)。如果有64個輸入通道(每個輸入通道是一個三維的數(shù)據(jù)),需要得到32個輸出通道(每個輸出通道也是一個三維的數(shù)據(jù)),則需要有32個卷積核,每個卷積核有64個3×3×3的卷積算子。Conv3d中可訓練的參數(shù)的數(shù)量通常遠遠多于普通的Conv2d。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.卷積層

(4)PyTorch框架中的常用卷積類型③Conv3d

Conv3d類的語法格式如下。

torch.nn.Conv3d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)

Conv3d類的常用參數(shù)及其說明與Conv2d一致。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層

在卷積層中,可以通過調(diào)節(jié)步長參數(shù)來達到減少輸出尺寸的目的,池化層同樣基于局部相關(guān)性的思想,在局部相關(guān)的一組元素中進行采樣或信息聚合,從而得到新的元素值。如最大池化層(MaxPooling)返回局部相關(guān)元素集中最大的元素值,平均池化層(AveragePooling)返回局部相關(guān)元素集中元素的平均值。池化(pool)即下采樣(downsamples),目的是減少特征圖的尺寸。池化操作對于每個卷積后的特征圖是獨立進行的,池化窗口規(guī)模一般為2×2,相對于卷積層進行卷積運算,池化層進行的運算一般有以下3種。

(1)最大池化(MaxPooling)。取4個元素的最大值,這是最常用的池化方法。

(2)平均值池化(MeanPooling)。取4個元素的均值。

(3)高斯池化。借鑒高斯模糊的方法。

如果池化層的輸入單元大小不是2的整數(shù)倍,一般采取邊緣補零(zero-padding)的方式補成2的倍數(shù),然后再池化。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層(1)MaxPool2d二維最大池化MaxPool2d的作用是對二維信號(圖像)進行最大值池化,其計算過程如圖所示,其中池化窗口大小為(2,2),步長大小為(2,2),由一個大小為4×4的區(qū)域下采樣得到一個大小為2×2的區(qū)域。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層

(1)MaxPool2d

MaxPool2d類的語法格式如下。

torch.nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層

(1)MaxPool2d

MaxPool2d類的常用參數(shù)及其說明如表所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明kernel_size接收int或tuple,表示池化核尺寸,無默認值stride接收int或tuple,表示窗口的步幅,默認就等于窗口尺寸,默認為Nonepadding接收int或tuple,表示數(shù)據(jù)hw方向上的零填充層數(shù),默認為0dilation接收int或tuple,表示一個控制窗口中元素步幅的參數(shù),默認為1return_indices接收bool,表示如果等于True,會返回輸出最大值的序號,對于上采樣操作會有幫助,默認為Falseceil_mode接收bool,表示如果等于True,計算輸出數(shù)據(jù)的hw的時候,會使用向上取整,代替默認的向下取整的操作,默認為Fkernel_size接收int或tuple,表示池化核尺寸,無默認值2.池化層(2)AvgPool2dAvgPool2d表示對二維信號(圖像)進行平均值池化。對于輸出的每一個通道的特征圖的所有像素計算一個平均值,經(jīng)過全局平均池化(GlobalAveragePooling,GAP)之后得到一個特征向量,該向量的維度表示類別數(shù),然后直接輸入到softmax層。全局平均池化的圖解如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層

(2)AvgPool2d

AvgPool2d類的語法格式如下。

torch.nn.AvgPool2d(kernel_size,stride=None,padding=0,ceil_mode=False,count_include_pad=True,divisor_override=None)

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.池化層

(2)AvgPool2d

AvgPool2d類的常用參數(shù)及其說明如表所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明kernel_size接收int或tuple,表示池化核尺寸,無默認值stride接收int或tuple,表示窗口的步幅,默認就等于窗口尺寸,默認為Nonepadding接收int或tuple,表示數(shù)據(jù)hw方向上的零填充層數(shù),默認為0ceil_mode接收bool,表示如果等于True,計算輸出數(shù)據(jù)的hw的時候,會使用向上取整,代替默認的向下取整的操作,默認為Falsecount_include_pad接收bool,表示如果等于True,計算平均池化時,將包括padding填充的0,默認為Truedivisor_override接收int,表示求平均值時,可以不使用像素值的個數(shù)作為分母,而是使用除法因子,默認為None3.

全連接層

全連接層是指每個神經(jīng)元與前一層所有的神經(jīng)元全部連接,在整個卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用,即通過卷積、激活函數(shù)、池化等深度網(wǎng)絡(luò)提取出圖像的特征后,再經(jīng)過全連接層對結(jié)果進行識別分類。

例如,得到的特征圖的大小是3×3×5,然后將特征圖中的所有神經(jīng)元變成全連接層,實際上就是將一個3D的立方體重新排列,變成一個全連接層,里面包含有1×4096個神經(jīng)元,經(jīng)過一個或多個隱藏層后輸出結(jié)果,如圖所示。在這個過程中為了防止過擬合會引入丟棄層Dropout。最近的研究也表明,在進入全連接層之前,使用全局平均池化能夠有效地降低過擬合。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.

全連接層

要將3×3×5的輸出轉(zhuǎn)換成1×4096的形式,可以理解為在中間做了一個卷積,用一個3×3×5的卷積核去卷積激活函數(shù)的輸出,得到的結(jié)果就是全連接層的一個神經(jīng)元的輸出,這個輸出就是一個值。因為有4096個神經(jīng)元,所以就是用一個3×3×5×4096的卷積層去卷積激活函數(shù)的輸出。全連接層的計算過程,如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.全連接層

PyTorch的Linear類用于設(shè)置網(wǎng)絡(luò)中的全連接層,語法格式如下。

torch.nn.Linear(in_features,out_features,bias=True)

Linear類的常用參數(shù)及其說明如表所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明in_features接收int,表示上層神經(jīng)元個數(shù),無默認值out_features接收int,表示本層神經(jīng)元個數(shù),無默認值bias接收bool類,表示偏置,形狀為[out_features]。如果設(shè)置bias=False,那么該層將不會學習一個加性偏差。默認為True4.

歸一化層

歸一化層利用小批量上的均值核標準差,不斷調(diào)整網(wǎng)絡(luò)的中間輸出,從而使整個網(wǎng)絡(luò)在各層的中間輸出的數(shù)值更穩(wěn)定,提高訓練網(wǎng)絡(luò)的有效性。

歸一化層的主要作用是防止梯度爆炸和梯度消失。目前歸一化層主要有5種:批次歸一化層(BatchNormalization,BN)、橫向歸一化層(LayerNormalization,LN)、實例歸一化層(InstanceNormalization,IN)、組歸一化層(GroupNormalization,GN)和可切換歸一化層(SwitchableNormalization,SN)。

深度網(wǎng)絡(luò)中的數(shù)據(jù)維度一般是[N,C,H,W]或者[N,H,W,C]格式,N是batchsize,H/W是特征(feature)的高/寬,C是feature的通道(channel),壓縮H/W至一個維度,其中4種常用的歸一化層的三維表示如圖所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層4.

歸一化層

BatchNormalization層應用了一種變換規(guī)范某一層的數(shù)據(jù),該變換可將該批所有樣本在每個特征上的平均值保持在0左右,標準偏差保持在1附近,將可能逐漸將非線性傳遞函數(shù)(如Sigmoid函數(shù))取值的極限飽和區(qū)靠攏的分布,強制拉回到均值為0方差為1的標準正態(tài)分布,使得規(guī)范化后的輸出落入對下一層的神經(jīng)元比較敏感的區(qū)域,以此避免梯度消失問題。因為梯度一直都能保持比較大的狀態(tài),所以對神經(jīng)網(wǎng)絡(luò)的參數(shù)調(diào)整效率比較高,即向損失函數(shù)最優(yōu)值邁動的步子大,可以加快收斂速度。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層4.歸一化層

BatchNorm2d類的語法格式如下。

torch.nn.BatchNorm2d(num_features,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層4.歸一化層

BatchNorm2d類的常用參數(shù)及其說明如表所示。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明in_features接收int,表示上層神經(jīng)元個數(shù),無默認值out_features接收int,表示本層神經(jīng)元個數(shù),無默認值bias接收bool類,表示偏置,形狀為[out_features]。如果設(shè)置bias=False,那么該層將不會學習一個加性偏差。默認為True5.

丟棄層

在前向傳播的時候,讓某個神經(jīng)元的激活值以一定的概率(rate)停止工作,這樣可以使模型泛化能力更強,因為神經(jīng)元不會太依賴某些局部的特征,丟棄層(Dropout)的工作原理如圖所示。首先隨機(臨時)刪掉網(wǎng)絡(luò)中一些隱藏層的神經(jīng)元,得到修改后的網(wǎng)絡(luò);然后對一小批輸入數(shù)據(jù)前向傳播,再將得到的損失通過修改后的網(wǎng)絡(luò)反向傳播,按照隨機梯度下降法更新對應的參數(shù)(只更新沒有被刪掉的神經(jīng)元的權(quán)重);最后恢復被刪掉的神經(jīng)元,重復此過程。3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層5.

丟棄層

Dropout類的語法格式如下。

torch.nn.Dropout(p=0.5,inplace=False)Dropout類的常用參數(shù)及其說明如表所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明p接收float,表示張量元素被置0的概率,默認為0.5inplace接收int,表示是否原地執(zhí)行,默認為False5.

丟棄層

Dropout類的語法格式如下。

torch.nn.Dropout(p=0.5,inplace=False)Dropout類的常用參數(shù)及其說明如表所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.2

卷積神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明p接收float,表示張量元素被置0的概率,默認為0.5inplace接收int,表示是否原地執(zhí)行,默認為False

3.1.2小節(jié)介紹了卷積神經(jīng)網(wǎng)絡(luò)的常用網(wǎng)絡(luò)層,下面將使用卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫數(shù)字識別圖像分類。使用的數(shù)據(jù)集為MNIST數(shù)據(jù)集,由楊立昆(YannLeCun)搜集,是一個大型的手寫體數(shù)字數(shù)據(jù)庫,通常用于訓練各種圖像處理系統(tǒng),也被廣泛用于機器學習領(lǐng)域的訓練和測試。MNIST數(shù)據(jù)集共有訓練數(shù)據(jù)60000項、測試數(shù)據(jù)10000項。每張圖像的大小為28×28(像素),每張圖像都為灰度圖像,位深度為8(灰度圖像是0-255)。下面從導入相關(guān)庫、數(shù)據(jù)加載與預處理、構(gòu)建網(wǎng)絡(luò)、訓練網(wǎng)絡(luò)和性能評估等方面進行介紹。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.3基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別

1.

導入相關(guān)庫

導入一些必要的包,除了常用的torch和Variable之外,還導入了DataLoader用于加載數(shù)據(jù),使用torchvision對圖像進行預處理。

2.

數(shù)據(jù)加載與預處理

首先,定義超參數(shù),如代碼3–10所示。n_epochs定義了整個訓練數(shù)據(jù)集的循環(huán)次數(shù),learning_rate和momentum是后續(xù)使用的優(yōu)化器的超參數(shù),random_seed是為可重復的實驗設(shè)置并使用隨機數(shù)產(chǎn)生設(shè)置隨機種子。其次,加載MNIST數(shù)據(jù)集,如代碼3–11所示。Normalize函數(shù)對數(shù)據(jù)進行標準化,使用的值為0.1307和0.3081,是MNIST數(shù)據(jù)集的全局平均值和標準偏差。

再次,以test_loader為例,觀察數(shù)據(jù)集的基本概貌,如代碼3–12所示,其中,example_targets是圖像實際對應的數(shù)字標簽。

最后,使用Matplotlib繪制其中的6張數(shù)字圖像,如代碼3–13所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.3基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別

3.

構(gòu)建網(wǎng)絡(luò)構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)時,使用兩個Conv2d卷積層和兩個全連接層Linear,并且選擇整流線性單元(簡稱ReLU)作為激活函數(shù)以及使用兩個Dropout層。首先,導入相關(guān)庫,如代碼3–14所示。然后,為構(gòu)建的網(wǎng)絡(luò)創(chuàng)建一個新類Net,如代碼3–15所示。forward函數(shù)定義了使用給定的層和函數(shù)計算輸出。最后,初始化網(wǎng)絡(luò)和優(yōu)化器,如代碼3–16所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.3基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別4.

訓練網(wǎng)絡(luò)在訓練網(wǎng)絡(luò)過程中,分別定義訓練函數(shù)和測試函數(shù)。通過訓練函數(shù),觀察使用隨機初始化的網(wǎng)絡(luò)參數(shù)獲得的精度和損失率。在測試函數(shù)中跟蹤正確分類的數(shù)字來計算網(wǎng)絡(luò)的精度。每一個epoch對所有訓練數(shù)據(jù)進行一次迭代,將在循環(huán)遍歷n_epochs之前手動添加測試函數(shù)調(diào)用,以便運用隨機初始化的參數(shù)來評估模型。首先,設(shè)置參數(shù)train_losses、train_counter、test_losses和test_counter并初始化,如代碼3–17所示。其次,進行一次測試循環(huán),如代碼3–18所示。首先,自定義訓練函數(shù)train,調(diào)用optimizer.zero_grad()方法手動將梯度設(shè)置為零,生成網(wǎng)絡(luò)的輸出并計算輸出與真值標簽之間的負對數(shù)概率損失。并使用optimizer.step()方法收集一組新的梯度并傳播回每個網(wǎng)絡(luò)參數(shù),使用state_dict()方法保存神經(jīng)網(wǎng)絡(luò)模塊以及優(yōu)化器的內(nèi)部狀態(tài)。通過1次測試,觀察使用隨機初始化的網(wǎng)絡(luò)參數(shù)獲得的精度和損失率。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.3基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別4.

訓練網(wǎng)絡(luò)然后,進入測試循環(huán),總結(jié)總體的測試損失,并跟蹤正確分類的數(shù)字來計算網(wǎng)絡(luò)的精度,如代碼3–19所示。首先,定義測試方法test(),在訓練網(wǎng)絡(luò)過程中,使用上下文管理器no_grad()方法避免將生成網(wǎng)絡(luò)輸出的計算結(jié)果存儲在計算圖中。然后,調(diào)用測試方法test()進行測試。最后,循環(huán)n_epochs次訓練進行模型評估,每訓練完一個周期調(diào)用一次測試方法test(),如代碼3–20所示。需要注意的是,代碼3–18進行過一次訓練,因此在運行代碼3–20前需要運行代碼3–17進行初始化。5.

性能評估通過前面介紹,僅僅經(jīng)過3個階段的訓練,已經(jīng)能夠達到測試集97%的準確率。下面通過畫出訓練中損失的變化曲線,觀察訓練過程的參數(shù)變化,對模型性能進行評估,如代碼3–21所示。

3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.1.3基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別13.2

循環(huán)神經(jīng)網(wǎng)絡(luò)目錄3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)23.3生成對抗網(wǎng)絡(luò)31.RNN

循環(huán)神經(jīng)網(wǎng)絡(luò)能很好地處理文本數(shù)據(jù)中變長并且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到后地閱讀文章中的每一個單詞,將前面閱讀到的有用信息編碼到狀態(tài)變量中去,從而擁有了一定的記憶能力,可以更好地理解之后的文本。RNN的網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。

右方是左方的展開形式,左方中的x為輸入層,o為輸出層,S為隱含層,V、W、U為權(quán)重,右方中的t指第幾次的計算,計算第t次的隱含層狀態(tài)時為3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.RNN

將RNN的網(wǎng)絡(luò)結(jié)構(gòu)進一步地詳細展開,循環(huán)神經(jīng)網(wǎng)絡(luò)的隱層結(jié)構(gòu)如圖所示。

3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.RNN

將上圖中的隱藏層按時間線展開,如下圖所示。假設(shè)一句話有4個單詞,每個單詞的Embedding層的輸出向量作為

時刻的輸入

,整個網(wǎng)絡(luò)的輸出可以在最后一個單詞輸入后得到。

3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.LSTM

假如現(xiàn)在有這樣一個需求,根據(jù)現(xiàn)有文本預測下一個詞語,如“天上的云朵漂浮在____”,通過間隔不遠的位置就可以預測出來詞語是天上,但是對于其他一些句子,可能需要被預測的詞語在前100個詞語之前,那么此時由于間隔非常大,隨著間隔的增加可能會導致真實的預測值對結(jié)果的影響變得非常小,而無法非常好地進行預測,即RNN中的長期依賴問題(long-TermDependencies)。LSTM(LongShort-TermMemory網(wǎng)絡(luò))可以很好地解決這個問題。LSTM是RNN的一種特殊類型,可以學習長期依賴信息。LSTM的內(nèi)部結(jié)構(gòu),如圖所示。LSTM內(nèi)部主要分為3個階段,首先是忘記階段,其次是選擇記憶階段,最后是輸出階段。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.LSTM

LSTM通過門控狀態(tài)來控制傳輸狀態(tài),記住需要長時間記憶的,忘記不重要的信息;而不像普通的RNN那樣只能夠“呆萌”地有一種記憶疊加方式。但也因為引入了很多內(nèi)容,導致參數(shù)變多,也使得訓練難度加大了很多。因此訓練量大時會使用GRU網(wǎng)絡(luò)。

在一個訓練好的網(wǎng)絡(luò)中,當輸入的序列中沒有重要信息時,LSTM的遺忘門的值接近于1,輸入門的值接近于0,此時過去的記憶會被保存,從而實現(xiàn)了長期記憶功能;當輸入的序列中出現(xiàn)了重要的信息時,LSTM應當將其存入記憶中,此時其輸入門的值會接近于1;當輸入的序列中出現(xiàn)了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近于0,這樣舊的記憶被遺忘,新的重要信息被記憶。經(jīng)過這樣的設(shè)計,整個網(wǎng)絡(luò)更容易學習到序列之間的長期依賴。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.GRU

GRU(門控循環(huán)單元)是在LSTM上進行簡化而得到的,GRU的網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。

GRU有兩個門,即一個重置門(resetgate)和一個更新門(updategate)。重置門決定了如何將新的輸入信息與前面的記憶相結(jié)合,更新門定義了前面記憶保存到當前時間步的量。如果將重置門設(shè)置為1,更新門設(shè)置為0,那么將再次獲得標準RNN網(wǎng)絡(luò)。GRU使用門控機制學習長期依賴關(guān)系的基本思想和LSTM一致,但還是有一些關(guān)鍵區(qū)別。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.GRU

具體有如下5點。

(1)GRU有兩個門(重置門與更新門),而LSTM有三個門(輸入門、遺忘門和輸出門)。

(2)GRU并不會控制并保留內(nèi)部記憶(),且沒有LSTM中的輸出門。

(3)LSTM中的輸入與遺忘門對應于GRU的更新門,重置門直接作用于前面的隱藏狀態(tài)。

(4)GRU在計算輸出時并不應用二階非線性。

(5)

代表更新門,更新門的作用類似于LSTM中的遺忘門和輸入門,它能決定有多少歷史信息可以傳遞到下一時刻。

代表重置門,重置門決定有多少歷史信息不能傳遞到下一時刻。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.1

常用循環(huán)神經(jīng)網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.

Embedding層

分類數(shù)據(jù)是指表示來自有限選擇集的一個或多個離散項的輸入特征。分類數(shù)據(jù)最直接的表示方式是通過稀疏張量(sparsetensors)表示,即獨熱編碼(One-Hot-Encoding)實現(xiàn)矢量化。但是,通過獨熱編碼實現(xiàn)的分類數(shù)據(jù)向量化,有如下兩個問題使得機器學習不能有效學習。

(1)獨熱向量(one-hotvector)太大,在深度學習中,巨大的輸入向量意味著神經(jīng)網(wǎng)絡(luò)的超大數(shù)量的權(quán)重。假設(shè)一個詞匯表中有m個單詞,并且輸入上的網(wǎng)絡(luò)的第一層中有n個節(jié)點,則需要使用m×n個權(quán)重來訓練該網(wǎng)絡(luò)的第一層。大量的權(quán)重會導致有效訓練需要的數(shù)據(jù)增多且網(wǎng)絡(luò)訓練和模型應用所需的計算量增多。

(2)向量間缺少有意義的關(guān)系。將RGB通道的像素值提供給圖像分類器,那么談論“相近”值是有意義的,如“略帶紅色的藍色接近純藍色”這個判斷無論是在語義上還是在向量之間的幾何距離方面都成立。但是,假設(shè)有一個索引1247的1的向量表示為“馬”,另一個索引50430的1的向量表示為“羚羊”。外貌跟“馬”一樣長了四條腿的“羚羊”與“獅子”很接近。這句話無論是在語義上還是在生物學中都不成立。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.

Embedding層

Embedding層的作用就是能夠?qū)⒏呔S數(shù)據(jù)映射到較低維空間,這樣解決了向量空間高維度的問題,又賦予了單詞間幾何空間距離大小的實際意義。Embedding層只能用作網(wǎng)絡(luò)中的第一層。

Embedding類的語法格式如下。torch.nn.Embedding(num_embeddings,embedding_dim,padding_idx=None,max_norm=None,norm_type=2,scale_grad_by_freq=False,sparse=False)3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層1.

Embedding層

Embedding類的參數(shù)說明如下。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明num_embeddings接收int,表示嵌入字典的大小,無默認值embedding_dim接收int,表示每個嵌入向量的大小,無默認值padding_idx接收int,表示如果提供的話,輸出遇到此下標時用零填充,默認為Nonemax_norm接收float,表示如果提供的話,會重新歸一化詞嵌入,使它們的范數(shù)小于提供的值,默認為Nonenorm_type接收float,表示指定利用什么范數(shù)計算,并用于對比max_norm,默認為2scale_grad_by_freq接收bool,表示根據(jù)單詞在mini-batch中出現(xiàn)的頻率,對梯度進行放縮,默認為Falsesparse接收bool,表示若為True,則與權(quán)重矩陣相關(guān)的梯度轉(zhuǎn)變?yōu)橄∈鑿埩?,默認為False2.

循環(huán)層

在PyTorch中提供了一些常用的實現(xiàn)循環(huán)層的類,如RNN、LSTM和GRU類。

(1)RNN類

PyTorch中用于實現(xiàn)RNN的主要是RNN類及RNNCell類兩種方法。兩者的區(qū)別是前者輸入一個序列,而后者輸入單個時間步,并且必須手動完成時間步之間的操作。

RNN類的語法格式如下。torch.nn.RNN(input_size,hidden_size,num_layers=1,nonlinearity=’tanh’,bias=True,batch_first=False,dropout=0,bidirectional=False)3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.

循環(huán)層

(1)RNN類

RNN類的常用參數(shù)及其說明如下。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明input_size接收int,表示輸入特征的維度,無默認值hidden_size接收int,表示隱藏層神經(jīng)元個數(shù),無默認值num_layers接收int,表示網(wǎng)絡(luò)的層數(shù),默認為1nonlinearity接收bool,表示選用的非線性激活函數(shù),默認為’tanh’bias接收bool,表示是否使用偏置,默認為Truebatch_first接收bool,表示輸入數(shù)據(jù)的形式,如(seq,batch,feature),即將序列長度放在第一位,batch放在第二位。默認為Falsedropout接收bool,表示是否在輸出層應用dropout,默認為02.

循環(huán)層

(1)RNN類

PyTorch中用于實現(xiàn)RNN的主要是RNN類及RNNCell類兩種方法。兩者的區(qū)別是前者輸入一個序列,而后者輸入單個時間步,并且必須手動完成時間步之間的操作。

RNNCell類的語法格式如下。torch.nn.RNNCell(input_size,hidden_size,bias=True,nonlinearity='tanh')3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.

循環(huán)層

(1)RNN類

RNNCell類的常用參數(shù)及其說明如下。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明input_size接收int,表示輸入特征的維度,無默認值hidden_size接收int,表示隱藏層神經(jīng)元個數(shù),無默認值num_layers接收int,表示網(wǎng)絡(luò)的層數(shù),默認為1nonlinearity接收bool,表示選用的非線性激活函數(shù),默認為’tanh’2.

循環(huán)層

(2)LSTM類

LSTM類的語法格式如下。torch.nn.LSTM(input_size,hidden_size,num_layers,bias,batch_first,dropout,bidirectional)3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.

循環(huán)層

(2)LSTM類

LSTM類的常用參數(shù)及其說明如下。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明input_size接收int,表示輸入數(shù)據(jù)的特征維數(shù),通常就是embedding_dim(詞向量的維度),無默認值hidden_size接收int,表示隱藏層神經(jīng)元的數(shù)量,即每一層有多少個LSTM單元,無默認值num_layer接收int,表示RNN中的LSTM單元的層數(shù),無默認值bias接收bool,表示是否使用偏置,默認使用Truebatch_first接收bool,表示輸入的數(shù)據(jù)需要[seq_len,batch,feature],如果為True,則為[batch,seq_len,feature],默認為Falsedropout接收int,表示dropout的比例。dropout是一種訓練過程中讓部分參數(shù)隨機失活的一種方式,能夠提高訓練速度,同時能夠解決過擬合的問題。這里是在LSTM的最后一層,對每個輸出進行dropout,默認為0bidirectional接收bool,表示是否使用雙向LSTM,默認為False2.

循環(huán)層

(3)GRU類

GRU類的語法格式如下。torch.nn.GRU(input_size,hidden_size,num_layers,bias,batch_first,dropout,bidirectional)3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層2.

循環(huán)層

(3)GRU類

GRU類的常用參數(shù)及其說明如下。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層參數(shù)名稱說明input_size接收int,表示輸入數(shù)據(jù)的特征維數(shù),通常就是embedding_dim(詞向量的維度),無默認值hidden_size接收int,表示隱藏層神經(jīng)元的數(shù)量,即每一層有多少個LSTM單元,無默認值num_layer接收int,表示RNN中的層數(shù),無默認值bias接收bool,表示是否使用偏置,默認為Truebatch_first接收bool,表示輸入的數(shù)據(jù)需要[seq_len,batch,feature],如果為True,則為[batch,seq_len,feature],默認為Falsedropout接收int,表示dropout的比例。如果非零的話,將會在RNN的輸出上加個dropout,最后一層除外。默認為0bidirectional接收bool,表示是否使用雙向RNN,默認為False3.

注意力模型

注意力模型(AttentionModel)被廣泛使用在自然語言處理、圖像識別及語音識別等各種不同類型的深度學習任務中,是深度學習技術(shù)中值得關(guān)注與深入了解的核心技術(shù)之一。無論是圖像處理、語音識別還是自然語言處理的各種不同類型的任務中,都能遇到注意力模型。

(1)視覺注意力機制

視覺注意力機制是人類視覺所特有的大腦信號處理機制。人類視覺通過快速掃描全局圖像,獲得需要重點關(guān)注的目標區(qū)域,也就是注意力焦點,然后,對這一目標區(qū)域投入更多注意力資源,以獲取更多目標的細節(jié)信息,同時抑制其他無用信息。這是人類利用有限的注意力資源從大量信息中快速篩選出高價值信息的手段,是人類在長期進化中形成的一種生存機制,人類視覺注意力機制極大地提高了視覺信息處理的效率與準確性。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.

注意力模型

(2)Encoder-Decoder框架

Encoder-Decoder框架是目前大多數(shù)注意力模型構(gòu)建的基礎(chǔ)。其實,注意力模型可以看作一種通用的思想,本身并不依賴于特定框架。Encoder-Decoder框架可以看作是一種深度學習領(lǐng)域的研究模式,應用場景異常廣泛。抽象的文本處理領(lǐng)域的Encoder-Decoder框架,如圖所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.

注意力模型(3)注意力模型

抽象的文本處理領(lǐng)域的Encoder-Decoder框架可以看作是注意力不集中的分心模型。因為不管i為多少,都是基于相同的中間語義C進行編碼的,所以注意力對所有輸出都是相同的。注意力機制的任務是突出重點,也就是說,中間語義C對不同i應該有不同的側(cè)重點,如式(1)和式(2)所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.

注意力模型(4)自注意力模型自注意力模型(SelfAttention)也經(jīng)常被稱為內(nèi)部注意力模型(intraAttention),最近一年也獲得了比較廣泛的使用,比如Google最新的機器翻譯模型內(nèi)部大量采用了SelfAttention模型。在一般任務的Encoder-Decoder框架中,輸入Source和輸出Target內(nèi)容是不一樣的,如對于英-中機器翻譯而言,Source是英文句子,Target是對應的翻譯出的中文句子,Attention機制發(fā)生在Target的元素Query和Source中的所有元素之間。而SelfAttention顧名思義,指的不是Target和Source之間的Attention機制,而是Source內(nèi)部元素之間或者Target內(nèi)部元素之間發(fā)生的Attention機制,也可以理解為Target和Source相等時的這種特殊情況下的注意力計算機制。如果是常規(guī)的Target不等于Source情形下的注意力計算,其物理含義正如上文Encoder-Decoder框架部分所講??梢暬乇硎維elfAttention機制在同一個英語句子內(nèi)單詞間產(chǎn)生的聯(lián)系,如圖所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層3.

注意力模型(4)自注意力模型從圖可以看出,翻譯“making”的時候會注意到“moredifficult”,因為這兩者組成了一個常用的短語關(guān)系。SelfAttention不僅可以捕獲同一個句子中單詞之間的一些句法特征或者語義特征,在計算過程中還會直接將句子中任意兩個單詞的聯(lián)系通過一個計算步驟直接聯(lián)系起來,所以遠距離依賴特征之間的距離被極大縮短,有利于有效地利用這些特征。而RNN和LSTM網(wǎng)絡(luò)就需要依次按序列計算,對于遠距離的相互依賴的特征,要經(jīng)過若干時間序列的信息累積才能將兩者聯(lián)系起來,這樣距離越遠,有效捕獲的可能性就越小。當引入SelfAttention后,捕獲句子中長距離的相互依賴的特征就相對容易了。除此之外,SelfAttention對于增加計算的并行性也有直接幫助作用。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)層

3.2.2小節(jié)介紹了循環(huán)神經(jīng)網(wǎng)絡(luò)的常用網(wǎng)絡(luò)層,下面將使用循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)時間序列分析。使用的數(shù)據(jù)集為國際航班月客流量,包括1949到1960共12年的每年12個月的數(shù)據(jù),一共144條數(shù)據(jù)。目標是預測國際航班未來1個月的乘客數(shù)。下面從導入相關(guān)庫、數(shù)據(jù)加載與預處理、構(gòu)建網(wǎng)絡(luò)、訓練網(wǎng)絡(luò)和性能評估等方面進行介紹。1.數(shù)據(jù)加載與預處理

加載數(shù)據(jù)后,對數(shù)據(jù)進行預處理,將數(shù)據(jù)中為“NA”的數(shù)據(jù)去掉。由于月流量數(shù)據(jù)是不規(guī)范的標量,需要將數(shù)據(jù)標準化到同一尺度內(nèi),即0~1之間,以便用于模型訓練。加載數(shù)據(jù)并預處理,如代碼3–28所示。然后創(chuàng)建數(shù)據(jù)集,將前十年的數(shù)據(jù)作為訓練集,后兩年的數(shù)據(jù)作為測試集,如代碼3–29所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.3

基于LSTM的時間序列分析2.

構(gòu)建網(wǎng)絡(luò)

構(gòu)建網(wǎng)絡(luò)分為兩步,首先構(gòu)建一個兩層的LSTM,接受兩個月的輸入數(shù)據(jù)作為特征,得到一個輸出特征。然后,構(gòu)建一個線性層將LSTM的輸出回歸到月流量的具體數(shù)值,使用view函數(shù)來重新排列線性層的輸入,因為全連接層Linear不接受三維的輸入,所以先將前兩維合并,然后經(jīng)過線性層之后再將其分開,最后輸出結(jié)果,如代碼3–31所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.3

基于LSTM的時間序列分析3.

訓練網(wǎng)絡(luò)

訓練網(wǎng)絡(luò)首先需要實例化模型,如代碼3–32所示。其中輸入的維度設(shè)置為2,因為使用兩個月的流量作為輸入,隱藏層的維度可以任意指定,此處設(shè)置為4。然后,還需設(shè)置使用的損失函數(shù)與優(yōu)化算法。

4.

性能評估

為了進行性能評估,畫出實際結(jié)果和預測的結(jié)果折線圖,如代碼3–34所示。3.2

循環(huán)神經(jīng)網(wǎng)絡(luò)3.2.3

基于LSTM的時間序列分析13.2

循環(huán)神經(jīng)網(wǎng)絡(luò)目錄3.1卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)23.3生成對抗網(wǎng)絡(luò)3

生成對抗網(wǎng)絡(luò)(GenerativeAdversarialNetworks,GAN)是一種深度學習模型,是近年來提出的復雜分布無監(jiān)督學習的方法之一。網(wǎng)絡(luò)通過框架中的生成器(GenerativeModel)和判別器(DiscriminativeModel)的互相博弈學習產(chǎn)生輸出。在經(jīng)典GAN理論中,并不要求生成器和判別器都是神經(jīng)網(wǎng)絡(luò),只需要能夠擬合對應的生成和判別函數(shù)即可,但在實際運用中通常使用深度神經(jīng)網(wǎng)絡(luò)作為生成器和判別器。3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.3.2基于GAN的手寫數(shù)字圖像生成3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.

經(jīng)典GAN網(wǎng)絡(luò)經(jīng)典GAN網(wǎng)絡(luò)的目的是讓生成的假圖片無法被判定成假圖片,以生成假小狗圖片為例,需要一個生成假小狗圖片的網(wǎng)絡(luò),稱之為生成器generator,還有一個判斷小狗圖片真假的判別器discrimator,如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)1.

經(jīng)典GAN網(wǎng)絡(luò)

首先將真實的小狗圖片輸入網(wǎng)絡(luò)中,經(jīng)過網(wǎng)絡(luò)discriminator可以訓練出一個判別器,對真假樣本能做出判斷。在判別器discriminator的基礎(chǔ)上,對網(wǎng)絡(luò)generator進行訓練可以得到一個生成器。然后將生成器generator生成的小狗圖片交給判別器discriminator來判別真?zhèn)危绻袆e器判斷為假小狗圖片,則讓生成器吸取教訓繼續(xù)學習訓練。直到判別器無法認出生成器生成的是假小狗圖片且給予了“真”小狗圖片的判斷。最后,輸出實際為“假”,判斷為“真”的圖片,達到以假亂真的效果。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.

DCGAN網(wǎng)絡(luò)

卷積生成對抗網(wǎng)絡(luò)(DCGAN)是繼經(jīng)典GAN之后的變種,其主要的改進內(nèi)容為網(wǎng)絡(luò)結(jié)構(gòu),極大地提升了訓練的穩(wěn)定性以及生成結(jié)果的質(zhì)量。DCGAN使用兩個卷積神經(jīng)網(wǎng)絡(luò)(CNN)分別表示生成器和判別器,其中生成器結(jié)構(gòu)如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)2.

DCGAN網(wǎng)絡(luò)

(1)取消所有池化層。生成器中使用轉(zhuǎn)置卷積(TransposedConvolutionalLayer)進行上采樣,判別器中用加入步幅stride的卷積代替池化層。

(2)在生成器和判別器中均使用批歸一化。神經(jīng)網(wǎng)絡(luò)中的每一層都會使得該層輸出數(shù)據(jù)的分布發(fā)生變化,隨著層數(shù)的增加,網(wǎng)絡(luò)的整體偏差會越來越大。批歸一化(batchnormalization)可以解決這一問題,通過對每一層的輸入都進行歸一化的處理,能夠有效使得數(shù)據(jù)服從某個固定的分布。

(3)去掉全連接層。全連接層的缺點在于參數(shù)過多,當神經(jīng)網(wǎng)絡(luò)層數(shù)多了后運算速度將會變得非常慢,此外全連接層會使得網(wǎng)絡(luò)變得容易過擬合。

(4)生成器和判別器使用不同的激活函數(shù)。生成器的輸出層使用ReLU激活函數(shù),判別器的輸出層使用Tanh激活函數(shù)。判別器中對除輸出層外的所有層均使用LeakyReLU激活函數(shù)。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.

CGAN網(wǎng)絡(luò)

CGAN是在GAN的基礎(chǔ)上進行改進的,其改進的目標是使得網(wǎng)絡(luò)能夠指定具體生成的數(shù)據(jù)。通過對經(jīng)典的GAN生成器和判別器添加額外的條件信息,實現(xiàn)條件生成網(wǎng)絡(luò)。最常見的額外信息為類別標簽或者是其他的輔助信息。

CGAN的核心就是將條件信息加入到了生成器generator和判別器discriminator中。

(1)經(jīng)典的GAN生成器的輸入信息是固定長度的噪聲信息,CGAN中則是將噪聲信息結(jié)合標簽信息組合起來作為輸入,標簽信息一般由one-hot編碼構(gòu)成,如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)3.

CGAN網(wǎng)絡(luò)

(2)經(jīng)典的GAN判別器輸入是圖像數(shù)據(jù)(真實的訓練樣本和生成器生成的數(shù)據(jù)),在CGAN中則是將類別標簽和圖像數(shù)據(jù)進行組合作為輸入,如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)4.

CycleGAN網(wǎng)絡(luò)

CycleGAN是朱俊彥(Jun-YanZhu)等人于2017年3月份提出的生成對抗模型。該模型的作用是將一類圖片轉(zhuǎn)換成另外一類圖片。假設(shè)有X和Y兩個圖像域(比如馬和斑馬),CycleGAN能夠?qū)D像域X的圖像(馬)轉(zhuǎn)換為圖像域Y的圖像(斑馬),或者是將圖像域Y的圖像(斑馬)轉(zhuǎn)換為圖像域X的圖像(馬),如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.1常用生成對抗網(wǎng)絡(luò)算法及其結(jié)構(gòu)4.

CycleGAN網(wǎng)絡(luò)

CycleGAN的網(wǎng)絡(luò)結(jié)構(gòu)如圖所示。3.3生成對抗網(wǎng)絡(luò)3.3.2

基于GAN的手寫數(shù)字圖像生成

3.3.1小節(jié)介紹了生成對抗網(wǎng)絡(luò)中的常用網(wǎng)絡(luò)算法,下面將使用生成對抗網(wǎng)絡(luò)實現(xiàn)手寫數(shù)字圖像生成。通過該實例的介紹,進一步了解生成對抗網(wǎng)絡(luò)的用法和作用。目標是依據(jù)MNIST數(shù)據(jù)集生成新的手寫數(shù)字圖像,主要包括數(shù)據(jù)加載與預處理、構(gòu)建網(wǎng)絡(luò)、訓練網(wǎng)絡(luò)等步驟。1.數(shù)據(jù)加載與預處理

數(shù)據(jù)加載與預處理主要是為判別器生成一定數(shù)量的樣本并進行繪制。首先,定義畫圖工具show_images函數(shù),如代碼3–35所示。

然后,定義用于取樣的ChunkSampler類,從MNIST數(shù)據(jù)集中取樣,數(shù)量為128,最后將樣本繪制出來,如代碼3–36所示。3.3生成對抗網(wǎng)絡(luò)3.3.2

基于GAN的手寫數(shù)字圖像生成2.

構(gòu)建網(wǎng)絡(luò)

構(gòu)建生成對抗網(wǎng)絡(luò)需要定義判別器和生成器,然后再構(gòu)建生成對抗網(wǎng)絡(luò)。

首先,使用Sequential類定義判別器,包括了卷積層、池化層和LeakyReLU激活函數(shù)。判別器的輸入可以是真實的圖片(從MINIST數(shù)據(jù)集取出的圖片),也可以是生成器生成的圖片,如代碼3–37所示。

其次,定義生成器,包括BatchNorm1d層、激活函數(shù)和二維轉(zhuǎn)置卷積,其中激活函數(shù)采用relu函數(shù),輸入是一組噪聲noise_dim,如代碼3–38所示。再次,分別定義判別器和生成器的損失函數(shù),如代碼3–39所示。最后,將生成器和判別器串聯(lián)在一起,構(gòu)建成一個生成對抗網(wǎng)絡(luò),如代碼3–40所示。3.3生成對抗網(wǎng)絡(luò)3.3.2

基于GAN的手寫數(shù)字圖像生成3.

訓練網(wǎng)絡(luò)首先定義優(yōu)化器,如代碼3–41所示,使用Adam優(yōu)化器來進行訓練,學習率設(shè)為3e-4,betas參數(shù)設(shè)為“0.5,0.999”。然后訓練網(wǎng)絡(luò),如代碼3–42所示。在訓練過程中,代碼會將生成對抗網(wǎng)絡(luò)每次迭代后所繪制的每張圖片都保存起來,運行結(jié)果如圖339所示。其中,從左到右、從上到下迭代次數(shù)分別為:250次、1000次、3000次、5000次、7000次和7500次??梢钥闯鰣D片質(zhì)量越來越高,圖片的清晰度越來越好。3.3生成對抗網(wǎng)絡(luò)了解常用的卷積神經(jīng)網(wǎng)絡(luò)的算法理論及應用。了解常用的循環(huán)神經(jīng)網(wǎng)絡(luò)的算法理論及應用。了解常用的生成對抗神經(jīng)網(wǎng)絡(luò)的算法理論及應用。掌握使用PyTorch實現(xiàn)常用深度神經(jīng)網(wǎng)絡(luò)的構(gòu)建和訓練的方法。小結(jié)手寫漢字識別1加載數(shù)據(jù)目錄目標分析2構(gòu)建、訓練和使用模型3漢族、漢字、漢語,與漢朝有著非常密切的關(guān)系,中國的主體民族漢朝時基本融合完成。后世的人們稱逐漸融合了其他民族的以華夏民族為主體的民族為漢族,后來,其使用的語言和文字也被稱為漢語、漢字。為滿足資源共享、信息傳播的需要,大量的中文信息都需要在計算機上進行處理。因此,解決漢字錄入的困難成為了至關(guān)重要的問題,而漢字識別的研發(fā),為高速輸入漢字的需求提供了支持。本章將介紹如何利用卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫漢字識別。本小節(jié)主要介紹手寫漢字識別的相關(guān)背景和本案例的分析目標與相關(guān)流程。目標分析1966年,國外的學者發(fā)表了第一篇關(guān)于漢字識別的論文,于是在全球范圍內(nèi),掀起了一股印刷體漢字識別的浪潮。在1980年以前,漢字識別主要停留在探索和研制階段,可以在理想情況下實現(xiàn)文字識別,但適應性和抗干擾性比較差,難以推廣使用。1986年以來,隨著文字識別技術(shù)的不斷發(fā)展,以清華大學電子工程系、中國科學院計算所智能中心為代表的多家單位基于傳統(tǒng)的漢字識別方法,分別研制并開發(fā)出了實用化的漢字識別系統(tǒng)。手寫漢字的識別廣泛地應用于文件資料自動錄入、機器翻譯、圖像文本的壓縮儲存等方面。漢字識別不但在實際應用方面十分常見,在理論研究方面也有重大意義。背景漢字的數(shù)量較大、形式較多,屬于大類別的模式識別問題,同時漢字識別還涉及到圖像處理、人工智能等領(lǐng)域。不同于印刷體的漢字識別,手寫的漢字由于不同的寫字風格,使得同一個字的寫出來的結(jié)果千差萬別。因此,研究一個可以識別多種風格(正楷、草書、隸書等)的手寫漢字的系統(tǒng)具有重要意義。由數(shù)據(jù)采集方式不同,手寫體漢字識別可以劃分為脫機手寫體漢字識別和聯(lián)機手寫體漢字識別兩大類。聯(lián)機手寫漢字識別所處理的手寫文字是書寫者通過物理設(shè)備,如數(shù)字筆、數(shù)字手寫板或觸摸屏在線書寫獲取的文字信號,書寫的軌跡通過定時采樣即時輸入到計算機中。脫機手寫文字識別所處理的手寫文字是通過掃描儀或攝像頭等圖像捕捉設(shè)備采集到的手寫文字二維圖片。背景因此,脫機和聯(lián)手寫識別技術(shù)所采用的方法和策略不盡相同。前者的識別對象是一系列按時間先后排列的采樣點信息,而后者則是丟失了書寫筆順信息的二維像素信息。由于沒有筆順信息,加之拍照掃描設(shè)備在不同光照、分辨率和書寫紙張等條件下,數(shù)字化會帶來一定的噪聲干擾,所以一般來說,脫機手寫文字識別比聯(lián)機手寫文字識別更加困難。手寫漢字識別是一個極具挑戰(zhàn)性的模式識別及機器學習問題,主要困難如下。書寫方式隨意,不正規(guī),無法達到印刷體要求。漢字字符級別比較繁雜,極具變化特點。諸多漢字在外形上相似,容易混淆。要求具備龐大的訓練數(shù)據(jù),但采集困難,特別是隨意性、無約束性手寫,對應數(shù)據(jù)庫的構(gòu)建顯得力不從心。背景可見,手寫漢字識別仍有較大的進步空間。一般而言,傳統(tǒng)的手寫中文單字識別系統(tǒng)主要包括數(shù)據(jù)預處理、特征提取和分類識別三部分。然而,近些年來,傳統(tǒng)的手寫漢字識別框架進展并不明顯,幾乎原地踏步。而深度學習的發(fā)展給手寫漢字識別帶來了不可錯失的機遇。實踐證明,在深度學習技術(shù)協(xié)助下,聯(lián)機手寫漢字識別、脫機手寫漢字識別的識別率都得到了足步的提升。背景本案例利用手寫漢字數(shù)據(jù)集和卷積神經(jīng)網(wǎng)絡(luò),實現(xiàn)手寫漢字識別,如圖所示。分析目標主要包括以下6個步驟。加載數(shù)據(jù),包括生成圖像集路徑txt文檔,讀取并變換圖像數(shù)據(jù)格式。構(gòu)建網(wǎng)絡(luò),即構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)LeNet-5。編譯網(wǎng)絡(luò),即設(shè)置優(yōu)化器和損失函數(shù)。訓練網(wǎng)絡(luò),即設(shè)置迭代次數(shù)大小并開始訓練網(wǎng)絡(luò)。性能評估,評估指標為測試集準確率。模型預測,加載保存好的模型并輸入圖像進行預測。分析目標本案例基于PyTorc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論