溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

發(fā)布時(shí)間:2021-11-15 15:15:09 來(lái)源:億速云 閱讀:211 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

01        
     
介紹

當(dāng)Yann LeCun發(fā)表了他關(guān)于開(kāi)發(fā)一種新型神經(jīng)網(wǎng)絡(luò)架構(gòu)——卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural network, CNN)——的研究成果時(shí),他的工作基本上沒(méi)有引起注意。在2012年的ImageNet計(jì)算機(jī)視覺(jué)大賽上,來(lái)自多倫多大學(xué)的一組研究人員花了14年的時(shí)間將CNN引入公眾視野。當(dāng)他們從數(shù)千個(gè)類(lèi)別的中對(duì)數(shù)百萬(wàn)張圖片進(jìn)行分類(lèi)時(shí),只產(chǎn)生了15.8%的錯(cuò)誤??爝M(jìn)到現(xiàn)在,當(dāng)前最先進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的精度超過(guò)人類(lèi)水平的性能。


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

ImageNet數(shù)據(jù)集上錯(cuò)誤率


在這些有希望的結(jié)果的激勵(lì)下,我開(kāi)始了解CNN的功能,以及它們是如何表現(xiàn)得如此出色的。因此為了全面了解人工智能的這種進(jìn)步,我在NumPy中從零開(kāi)始構(gòu)建了一個(gè)卷積神經(jīng)網(wǎng)絡(luò)。在完成這個(gè)項(xiàng)目之后,我覺(jué)得卷積神經(jīng)網(wǎng)絡(luò)在表面復(fù)雜性和它們實(shí)際復(fù)雜性之間存在著脫節(jié)。

0       2      

     
挑戰(zhàn)

CNN以其識(shí)別圖像模式的能力而聞名,因此本文中描述的網(wǎng)絡(luò)的任務(wù)就是圖像分類(lèi)。衡量計(jì)算機(jī)視覺(jué)算法執(zhí)行情況的最常見(jiàn)基準(zhǔn)之一是在MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)庫(kù)上對(duì)其進(jìn)行訓(xùn)練:該數(shù)據(jù)庫(kù)包含70,000個(gè)手寫(xiě)數(shù)字及其對(duì)應(yīng)的標(biāo)簽。目標(biāo)是訓(xùn)練CNN在標(biāo)記手寫(xiě)數(shù)字(從0到9)時(shí)盡可能準(zhǔn)確。經(jīng)過(guò)大約5個(gè)小時(shí)的訓(xùn)練和在訓(xùn)練集上的兩次循環(huán),這里展示的網(wǎng)絡(luò)能夠在測(cè)試數(shù)據(jù)上達(dá)到98%的準(zhǔn)確率,這意味著它可以正確地猜測(cè)顯示給它的幾乎每一個(gè)手寫(xiě)數(shù)字。


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別



讓我們回顧一下構(gòu)成網(wǎng)絡(luò)的各個(gè)組件,以及它們?nèi)绾芜B接在一起,從輸入數(shù)據(jù)形成預(yù)測(cè)。在解釋了每個(gè)組件之后,我們將對(duì)其功能進(jìn)行編碼。在這篇文章的最后一部分,我們將使用NumPy對(duì)網(wǎng)絡(luò)的每個(gè)部分進(jìn)行編程和訓(xùn)練。廢話(huà)少說(shuō),讓我們開(kāi)始吧。

0       3      

     
卷積神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)

     

     


卷積層(Convolutions)


CNN利用過(guò)濾器(也被稱(chēng)為內(nèi)核)來(lái)檢測(cè)圖像中存在哪些特征,比如邊緣。過(guò)濾器只是一個(gè)值的矩陣,叫做權(quán)值,它被訓(xùn)練來(lái)檢測(cè)特定的特征。過(guò)濾器移動(dòng)到圖像的每個(gè)部分,檢查它要檢測(cè)的特征是否存在。為了提供一個(gè)值來(lái)表示特定特征的可信度,過(guò)濾器執(zhí)行一個(gè)卷積操作,這是一個(gè)元素的乘積和兩個(gè)矩陣之間的和。


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別



當(dāng)特征出現(xiàn)在圖像的某一部分時(shí),濾波器與該部分圖像進(jìn)行卷積運(yùn)算,得到一個(gè)高值的實(shí)數(shù)。如果特性不存在,則結(jié)果值很低。


在下面的例子中,負(fù)責(zé)檢查右邊曲線(xiàn)的過(guò)濾器被傳遞到圖像的一部分。由于圖像的這一部分包含與濾波器所尋找的曲線(xiàn)相同的曲線(xiàn),因此卷積運(yùn)算的結(jié)果是一個(gè)很大的數(shù)(6600)。


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別



但是,當(dāng)相同的濾波器通過(guò)圖像中具有相當(dāng)不同的邊緣集的部分時(shí),卷積的輸出很小,這意味著不存在很強(qiáng)的右手曲線(xiàn)。


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別



為了使卷積神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)檢測(cè)輸入數(shù)據(jù)中特征的濾波器的值,必須通過(guò)非線(xiàn)性映射來(lái)傳遞濾波器。濾波器與輸入圖像卷積運(yùn)算的輸出用偏置項(xiàng)求和,并通過(guò)非線(xiàn)性激活函數(shù)。激活函數(shù)的目的是將非線(xiàn)性引入到我們的網(wǎng)絡(luò)中。由于我們的輸入數(shù)據(jù)是非線(xiàn)性的(對(duì)形成手寫(xiě)簽名的像素進(jìn)行線(xiàn)性建模是不可行的),我們的模型需要考慮這一點(diǎn)。


代碼要點(diǎn):


使用NumPy,我們可以很容易地對(duì)卷積運(yùn)算進(jìn)行編程。卷積函數(shù)利用for循環(huán)對(duì)圖像上的所有過(guò)濾器進(jìn)行卷積。在for循環(huán)的每個(gè)迭代中,使用兩個(gè)while循環(huán)將過(guò)濾器傳遞給圖像。在每個(gè)步驟中,過(guò)濾器是多元素的(*)與輸入圖像的一部分。然后使用NumPy 's sum方法將這個(gè)元素相乘的結(jié)果求和,得到一個(gè)單獨(dú)的值,然后添加一個(gè)偏差項(xiàng)。


縮減像素采樣(Downsampling)


為了加快訓(xùn)練過(guò)程并減少網(wǎng)絡(luò)消耗的內(nèi)存,我們嘗試減少輸入特性中存在的冗余。有幾種方法可以對(duì)圖像進(jìn)行降采樣,但在這篇文章中,我們將著眼于最常見(jiàn)的一種:max pooling(最大池化)。


在最大池化中,一個(gè)窗口根據(jù)設(shè)定的步長(zhǎng)(每次移動(dòng)多少單位)從一個(gè)圖像上經(jīng)過(guò)。在每個(gè)步驟中,窗口內(nèi)的最大值被合并到一個(gè)輸出矩陣中,因此稱(chēng)為最大池化。


在下面的圖像中,大小為f=2的窗口以2的步長(zhǎng)通過(guò)圖像。f表示最大池化窗口的大小(紅色框),s表示窗口在x和y方向上移動(dòng)的單元數(shù)。在每個(gè)步驟中,選擇窗口內(nèi)的最大值:



如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別


最大池化極大地減少了表示大小,從而減少了所需的內(nèi)存數(shù)量和以后在網(wǎng)絡(luò)中執(zhí)行的操作數(shù)量。


代碼要點(diǎn):

最大池操作歸結(jié)為一個(gè)for循環(huán)和幾個(gè)while循環(huán)。for循環(huán)用于遍歷輸入圖像的每一層,while循環(huán)將窗口滑動(dòng)到圖像的每個(gè)部分。在每個(gè)步驟中,我們使用NumPy的max方法來(lái)獲得最大值


全連接層(fully-connected layer)


在神經(jīng)網(wǎng)絡(luò)的全連通操作中,輸入表示被壓扁成一個(gè)特征向量,并通過(guò)神經(jīng)元網(wǎng)絡(luò)來(lái)預(yù)測(cè)輸出概率。


這些行被連接起來(lái)形成一個(gè)長(zhǎng)特征向量。如果存在多個(gè)輸入層,則將其行連接起來(lái)形成更長(zhǎng)的特征向量。


然后將特征向量通過(guò)多個(gè)密集層。在每一稠密層,特征向量乘以該層的權(quán)值,加上它的偏差,然后通過(guò)非線(xiàn)性。下圖顯示了全連通操作和稠密層:


如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別


代碼要點(diǎn):

NumPy使得編寫(xiě)CNN的全連接層變得非常簡(jiǎn)單。事實(shí)上,你可以用NumPy的reshape方法在一行代碼中完成


輸出層(Output layer)


CNN的輸出層負(fù)責(zé)生成給定輸入圖像的每個(gè)類(lèi)(每個(gè)數(shù)字)的概率。為了獲得這些概率,我們初始化最后的致密層,使其包含與類(lèi)相同數(shù)量的神經(jīng)元。然后,這個(gè)稠密層的輸出通過(guò)Softmax激活函數(shù),該函數(shù)將所有最終的稠密層輸出映射到一個(gè)元素之和為1的向量。

經(jīng)過(guò)訓(xùn)練,網(wǎng)絡(luò)在測(cè)試集上的準(zhǔn)確率平均為98%,我認(rèn)為這是相當(dāng)不錯(cuò)的。將訓(xùn)練時(shí)間延長(zhǎng)2-3個(gè)epoch后,我發(fā)現(xiàn)測(cè)試集的性能下降了。我推測(cè),在第三到第四個(gè)訓(xùn)練循環(huán)中,網(wǎng)絡(luò)開(kāi)始過(guò)度擬合訓(xùn)練集,不再泛化。

關(guān)于如何用NumPy搭建卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI