趙亞騰 孫鈺
關(guān)鍵詞:卷積神經(jīng)網(wǎng)絡(luò);MNIST;手寫體數(shù)字識別;Keras
1引言
數(shù)字識別巳經(jīng)應(yīng)用到了生活中的各個領(lǐng)域[1],如停車場停車按車牌號計費、交通電子眼抓拍違章、大規(guī)模數(shù)據(jù)統(tǒng)計、文件電子化存儲等。作為一種全球通用的數(shù)字符號,阿拉伯?dāng)?shù)字跨越了國家、文化以及民族的界限[2],在我們的身邊應(yīng)用非常廣泛。數(shù)字的類別數(shù)目適當(dāng),僅有10類,方便對研究方法進行評估和測試。研究基于深度學(xué)習(xí)的手寫數(shù)字識別方法不僅對理解深度學(xué)習(xí)有很大的幫助和對實踐深度學(xué)習(xí)理論有很重要的意義,而且在學(xué)習(xí)實踐中積累的經(jīng)驗和教訓(xùn)可以應(yīng)用到其他文字識別的領(lǐng)域[3]。正如“一千個讀者心中有一千個哈姆雷特”,即使是只有10個阿拉伯?dāng)?shù)字,但是每個人寫出來的也是萬般不同,若要通過機器精準(zhǔn)識別不同人的寫法依舊困難重重,所以可知手寫數(shù)字識別的研究在現(xiàn)代科技的應(yīng)用中具有很廣闊的前景和較大的探索價值[4]。
2卷積神經(jīng)網(wǎng)絡(luò)的模型
2.1卷積神經(jīng)網(wǎng)絡(luò)概述
簡單來說,卷積神經(jīng)網(wǎng)絡(luò)(CNN)[5]是由一個多層神經(jīng)網(wǎng)絡(luò)組成的系統(tǒng),其中每一層神經(jīng)網(wǎng)絡(luò)由多個二維平面組合而成,每個二維平面上又包含數(shù)個獨立神經(jīng)元。如圖1所示。
一般來說,CNN由兩層基礎(chǔ)結(jié)構(gòu)組合而成。其中,一層是卷積層(特征提取層)[6]。卷積層的工作原理是將其空間上的神經(jīng)元與上一層的感受一一對應(yīng)緊密相連,在運行過程中提取圖像的局部特征。在提取局部特征的后,通過比對與關(guān)聯(lián)即可與其他局部特征的位置關(guān)系關(guān)聯(lián)起來;另外一層基礎(chǔ)結(jié)構(gòu)叫下采樣層(功能映射層)。采樣層的目的是實現(xiàn)樣本的采樣和計算,在計算的過程中依賴每個采樣點上的多個要素圖,要素圖分布在計算層的平面,而神經(jīng)元是等權(quán)重分布在要素圖上的。
2.2卷積層
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心部分,神經(jīng)網(wǎng)絡(luò)卷積中大部分的計算內(nèi)容都由卷積層完成。卷積核其實就是通過各種濾波器集合而形成的,在卷積層上,卷積核只是占位空間很小的一部分,在深度計算過程中,通過計算分析輸入數(shù)據(jù)來得到卷積結(jié)果。卷積核的體積大小設(shè)置通過輸入?yún)?shù),可以動態(tài)靈活性選擇。卷積核的核心內(nèi)容是全連接神經(jīng)網(wǎng)絡(luò)找出要更新的權(quán)值w,即訓(xùn)練神經(jīng)網(wǎng)絡(luò)進行深度學(xué)習(xí)的核心內(nèi)容就是卷積核。訓(xùn)練的目的和過程就是最終找到反映訓(xùn)練數(shù)據(jù)整體特征的濾波器。如圖2所示,左邊作為卷積層的輸入項圖片(image),經(jīng)過中間卷積核(filter)的處理,最終產(chǎn)生右邊卷積后的特征圖譜(featuremap)。
2.3子采樣層
子采樣層又被稱為池化層,部分文獻也將其稱作采樣層。加入自采樣層的目的是控制輸入數(shù)據(jù)量的大小,減小樣本規(guī)模,減少網(wǎng)絡(luò)中參數(shù)的數(shù)量,最終實現(xiàn)的效果是可以節(jié)省計算資源、加快訓(xùn)練速率、節(jié)省時間。采樣層的另一大優(yōu)勢是可以實現(xiàn)對擬合出現(xiàn)的有效控制。實驗中使用最頻繁的采樣方式一般有兩種,即MaxPooling和MeanPooling。MaxPooling的保留方式是最終保留N*N數(shù)據(jù)樣本中的最大值,經(jīng)過實驗驗證,得出使用MaxPooling方式的效果更精準(zhǔn)的結(jié)論。2*2樣本的采樣過程和結(jié)果如圖3所示。
2.4全連接層
全連接層在卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中處于最后一層,即輸出層,它的目的和作用是解析輸出數(shù)據(jù)。此外,還需要對數(shù)據(jù)序列中的元素進行分析提取,以達到元素和神經(jīng)元分別對應(yīng)的目的。經(jīng)過層層對應(yīng),上下層的神經(jīng)元也響應(yīng)連接起來。全連接層則是將最終卷出來的訓(xùn)練模型進行轉(zhuǎn)化,從而標(biāo)記空間。所以,在實際的操作過程中,全連接層也是可以由卷積層實現(xiàn)的。
3應(yīng)用CNN進行數(shù)字手寫體識別流程
圖4所示為利用CNN系統(tǒng)對手寫體進行計算機識別的步驟過程。首先選取訓(xùn)練集,然后將初始化完成后的參數(shù)注入訓(xùn)練集,可以進行迭代形式的訓(xùn)練深度學(xué)習(xí),經(jīng)過反復(fù)的訓(xùn)練和學(xué)習(xí)后,當(dāng)?shù)螖?shù)達到最大且輸入輸出數(shù)據(jù)在合理范圍內(nèi),最后可以生成一個完整的CNN模型。選用測試集后將測試數(shù)據(jù)套人模型進行識別測試,經(jīng)過大量的測試集數(shù)據(jù)的輸入及輸出后,最終得到一個比較公正可信的文字識別率。
4實驗設(shè)置與實驗結(jié)果
4.1實驗環(huán)境
使用的計算機硬件配置為Intel(R) Core(TM) i5CPU,其主頻為2.67 GHz,內(nèi)存為8 GB,操作系統(tǒng)為微軟出品且一直在維護中的穩(wěn)定版Windows 10系統(tǒng)。語言框架為keras,運行軟件為Pycharm。
4.2MINIST數(shù)據(jù)集
本文采用MINIST數(shù)據(jù)集為樣本庫,該數(shù)據(jù)集庫是一個專門為計算機數(shù)據(jù)集采集而成的數(shù)據(jù)集合,其中收集了超過70 000張手寫數(shù)字圖片,范圍包含阿拉伯?dāng)?shù)字0~9,每張圖片由28*28的像素點組成。
5實驗結(jié)果與分析
本文使用的訓(xùn)練集是經(jīng)LeCun手寫后利用MINST構(gòu)建出來的訓(xùn)練數(shù)據(jù)庫。訓(xùn)練集數(shù)據(jù)1是根據(jù)MNIST數(shù)據(jù)庫的格式從該數(shù)據(jù)庫中分離出的部分數(shù)據(jù),與測試集沒有重疊部分。測試數(shù)據(jù)集2是由手寫轉(zhuǎn)化而成的圖片,從0~9共100個數(shù)字,訓(xùn)練過程中CNN每次耗費75s進行一次迭代執(zhí)行。模型訓(xùn)練結(jié)束后,經(jīng)過對識別精確度的評測確認,不斷修改參數(shù),以提高識別準(zhǔn)確率,最終達到精確度99%的效果。
6結(jié)束語
本文利用Python編程語言以及成熟可用的Keras框架,應(yīng)用Keras框架深度學(xué)習(xí)的機制完成神經(jīng)卷積網(wǎng)絡(luò)的手寫數(shù)字識別系統(tǒng)的研究和試驗。實驗最終實現(xiàn)了識別精準(zhǔn)度99%的效果,但還是有一些不足。首先,實驗的輸入訓(xùn)練集神經(jīng)卷積網(wǎng)絡(luò)進行深度學(xué)習(xí)和訓(xùn)練,使用大量數(shù)據(jù)來模擬手寫輸入而實現(xiàn)機器一對一的識別。由于條件有限且硬件計算能力不足,導(dǎo)致本次卷積網(wǎng)絡(luò)的計算層數(shù)比較少。其次,測試集由于使用的是MINST數(shù)據(jù)集,并沒有較多真實手寫的數(shù)據(jù)供測試,所以測試數(shù)據(jù)離真實手寫還有一定差距。下一步的研究和進步方向主要對神經(jīng)卷積模型進行優(yōu)化,使之計算識別速率更快、準(zhǔn)確率更高。同時,尋找更多現(xiàn)實生活中的圖像作為測試集數(shù)據(jù),進行更多的深度學(xué)習(xí)、模型優(yōu)化,待模型成熟后,應(yīng)用識別系統(tǒng)進行更加全面真實的識別測試,從而將研究成果更多地應(yīng)用在工作及生活中。