中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何用NumPy搭建卷積神經網絡實現手寫數字識別

發布時間:2021-11-15 15:15:09 來源:億速云 閱讀:218 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何用NumPy搭建卷積神經網絡實現手寫數字識別,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

01        
     
介紹

當Yann LeCun發表了他關于開發一種新型神經網絡架構——卷積神經網絡(Convolutional neural network, CNN)——的研究成果時,他的工作基本上沒有引起注意。在2012年的ImageNet計算機視覺大賽上,來自多倫多大學的一組研究人員花了14年的時間將CNN引入公眾視野。當他們從數千個類別的中對數百萬張圖片進行分類時,只產生了15.8%的錯誤。快進到現在,當前最先進的卷積神經網絡實現的精度超過人類水平的性能。


如何用NumPy搭建卷積神經網絡實現手寫數字識別

ImageNet數據集上錯誤率


在這些有希望的結果的激勵下,我開始了解CNN的功能,以及它們是如何表現得如此出色的。因此為了全面了解人工智能的這種進步,我在NumPy中從零開始構建了一個卷積神經網絡。在完成這個項目之后,我覺得卷積神經網絡在表面復雜性和它們實際復雜性之間存在著脫節。

0       2      

     
挑戰

CNN以其識別圖像模式的能力而聞名,因此本文中描述的網絡的任務就是圖像分類。衡量計算機視覺算法執行情況的最常見基準之一是在MNIST手寫數字數據庫上對其進行訓練:該數據庫包含70,000個手寫數字及其對應的標簽。目標是訓練CNN在標記手寫數字(從0到9)時盡可能準確。經過大約5個小時的訓練和在訓練集上的兩次循環,這里展示的網絡能夠在測試數據上達到98%的準確率,這意味著它可以正確地猜測顯示給它的幾乎每一個手寫數字。


如何用NumPy搭建卷積神經網絡實現手寫數字識別



讓我們回顧一下構成網絡的各個組件,以及它們如何連接在一起,從輸入數據形成預測。在解釋了每個組件之后,我們將對其功能進行編碼。在這篇文章的最后一部分,我們將使用NumPy對網絡的每個部分進行編程和訓練。廢話少說,讓我們開始吧。

0       3      

     
卷積神經網絡如何學習

     

     


卷積層(Convolutions)


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


如何用NumPy搭建卷積神經網絡實現手寫數字識別



當特征出現在圖像的某一部分時,濾波器與該部分圖像進行卷積運算,得到一個高值的實數。如果特性不存在,則結果值很低。


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


如何用NumPy搭建卷積神經網絡實現手寫數字識別



但是,當相同的濾波器通過圖像中具有相當不同的邊緣集的部分時,卷積的輸出很小,這意味著不存在很強的右手曲線。


如何用NumPy搭建卷積神經網絡實現手寫數字識別



為了使卷積神經網絡能夠學習檢測輸入數據中特征的濾波器的值,必須通過非線性映射來傳遞濾波器。濾波器與輸入圖像卷積運算的輸出用偏置項求和,并通過非線性激活函數。激活函數的目的是將非線性引入到我們的網絡中。由于我們的輸入數據是非線性的(對形成手寫簽名的像素進行線性建模是不可行的),我們的模型需要考慮這一點。


代碼要點:


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


縮減像素采樣(Downsampling)


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


在最大池化中,一個窗口根據設定的步長(每次移動多少單位)從一個圖像上經過。在每個步驟中,窗口內的最大值被合并到一個輸出矩陣中,因此稱為最大池化。


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



如何用NumPy搭建卷積神經網絡實現手寫數字識別


最大池化極大地減少了表示大小,從而減少了所需的內存數量和以后在網絡中執行的操作數量。


代碼要點:

最大池操作歸結為一個for循環和幾個while循環。for循環用于遍歷輸入圖像的每一層,while循環將窗口滑動到圖像的每個部分。在每個步驟中,我們使用NumPy的max方法來獲得最大值


全連接層(fully-connected layer)


在神經網絡的全連通操作中,輸入表示被壓扁成一個特征向量,并通過神經元網絡來預測輸出概率。


這些行被連接起來形成一個長特征向量。如果存在多個輸入層,則將其行連接起來形成更長的特征向量。


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


如何用NumPy搭建卷積神經網絡實現手寫數字識別


代碼要點:

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


輸出層(Output layer)


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

經過訓練,網絡在測試集上的準確率平均為98%,我認為這是相當不錯的。將訓練時間延長2-3個epoch后,我發現測試集的性能下降了。我推測,在第三到第四個訓練循環中,網絡開始過度擬合訓練集,不再泛化。

關于如何用NumPy搭建卷積神經網絡實現手寫數字識別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

囊谦县| 蒙阴县| 辛集市| 江门市| 武隆县| 华容县| 阜新市| 阿克陶县| 甘泉县| 开阳县| 崇礼县| 五家渠市| 常德市| 托里县| 远安县| 申扎县| 仪征市| 奉节县| 中卫市| 霍山县| 来凤县| 英德市| 旬邑县| 独山县| 开远市| 本溪| 福泉市| 盈江县| 宾川县| 灵武市| 镇远县| 枣庄市| 寿光市| 莱西市| 和平区| 桃江县| 平湖市| 高尔夫| 彭山县| 安泽县| 南漳县|