戴茂
摘要:隨著科學(xué)技術(shù)的高速發(fā)展,在統(tǒng)計報表、郵政編碼、銀行票據(jù)等需要處理大量字符信息錄入的場所,手寫體數(shù)字識別系統(tǒng)的需求越來越大,怎樣將數(shù)字便捷地輸入到計算機中已經(jīng)是計算技術(shù)普及的關(guān)鍵問題。此文論述并設(shè)計實現(xiàn)了一個手寫體數(shù)字識別系統(tǒng)。所用的算法是卷積神經(jīng)網(wǎng)絡(luò)算法,它也是人工神經(jīng)網(wǎng)絡(luò)之中的一個種類,它是人工神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)兩種技術(shù)相結(jié)合后產(chǎn)生的一種全新的更加快速的網(wǎng)絡(luò)。
關(guān)鍵詞:手寫數(shù)字識別;卷積神經(jīng)網(wǎng)絡(luò);應(yīng)用
手寫體數(shù)字識別在郵政、金融等領(lǐng)域應(yīng)用廣泛。對于數(shù)字識別,人們往往要求識別器有很高的識別可靠性,數(shù)字識別的錯誤所帶來的影響比文字識別等其他識別所帶來的影響更大,特別是有關(guān)金融方面的數(shù)字識別錯誤所帶來的后果是無法想象的,識別錯一個數(shù)字,這其中的差距可能是幾的差距,也可能是幾十、幾百的差距,這些都還是小問題;但更有可能這一個數(shù)字代表的差距是幾萬、幾千萬甚至幾億乃至更多,那么這個錯誤造成的損失就無法估量了。因此,設(shè)計出有著高可靠性與高識別率的數(shù)字識別系統(tǒng)已經(jīng)成為了字符識別領(lǐng)域一個非常重要的環(huán)節(jié)。
1 網(wǎng)絡(luò)模型和數(shù)據(jù)庫及學(xué)習(xí)算法的選擇
1.1 關(guān)于Mnist數(shù)據(jù)庫的介紹
首先,Mnist是NIST數(shù)據(jù)庫的一個優(yōu)化子集。它是一個有著60000個訓(xùn)練樣本集與10000個測試樣本集的手寫體數(shù)字?jǐn)?shù)據(jù)庫。此數(shù)字庫一共有4個文件。
此數(shù)字庫的所有樣本集都有圖像文件以及標(biāo)簽文件。標(biāo)簽文件的作用是用來儲存樣本集中的每個樣本的數(shù)值標(biāo)簽,而每一個樣本的圖像數(shù)據(jù)信息則是由圖像文件存儲著。此數(shù)據(jù)庫的圖像數(shù)據(jù)均保存在二進制文件之中,且每個樣本圖像的大小均為28*28。
1.2 數(shù)字識別的模型選擇
手寫體數(shù)字雖然只有0~9十個數(shù)字,但由于寫法因人而異,不同地域同樣一個數(shù)字有多種不同的寫法,每個人都有自己的書寫習(xí)慣。且一些紙質(zhì)差異、筆畫粗細(xì)、光線問題、位置、尺度大小等等多種因素都能對輸入產(chǎn)生影響??紤]到這些因素,為讓網(wǎng)絡(luò)有良好的識別能力,我們這里采用在圖像識別領(lǐng)域有著優(yōu)秀表現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)作為此數(shù)字識別系統(tǒng)的訓(xùn)練模型。
1.3 學(xué)習(xí)算法的選擇
一個優(yōu)秀的網(wǎng)絡(luò)模型必須具備良好的學(xué)習(xí)算法,每個學(xué)習(xí)網(wǎng)絡(luò)都有著相對來說較為合適自己的學(xué)習(xí)算法,而并不是說越高端的算法就越好。在此文中,我選擇的學(xué)習(xí)算法是較為成熟的BP算法。此算法在文字前面有些許介紹,此處不再多做說明。
2 基于卷積神經(jīng)網(wǎng)絡(luò)的數(shù)字識別系統(tǒng)的設(shè)計
2.1 輸入層以及輸出層設(shè)定
根據(jù)樣本的特征與此網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu),可以大概判斷出輸入層與輸出層該如何設(shè)置。隱含層的個數(shù)可以是一個,也可以是多個,這與要分類的問題有關(guān)。
前文提及到在mnist數(shù)據(jù)庫中,所有的圖像都是28*28大小的,且以整個圖片的像素形式存儲在數(shù)據(jù)文件之中。每張圖像大小為28*28,故一個圖片像素點個數(shù)為784個。這里,卷積神經(jīng)網(wǎng)絡(luò)的輸入即為這784個像素點。
因為數(shù)字識別需要識別的是0~9這十個數(shù)字,即需要識別十種字符類別,所以將這個神經(jīng)網(wǎng)絡(luò)輸出層的神經(jīng)元節(jié)點數(shù)設(shè)置為10。
2.2 網(wǎng)絡(luò)的中間層設(shè)置
卷積神經(jīng)網(wǎng)絡(luò)的中間層有兩個部分,即卷積層(特征提取層)與下采樣層(特征映射層),由第二章中圖2-1所示,C1、C3為卷積層,S2、S4為降采樣層。
1)激活函數(shù)選擇
激活函數(shù)選擇sigmoid函數(shù)。同樣,在第二章有所提及。Sigmoid函數(shù)是嚴(yán)格遞增函數(shù),能較好的平衡線性與非線性之間的行為,比較貼近生物神經(jīng)元的工作。相比于其他函數(shù),sigmoid函數(shù)還存在著許多優(yōu)勢,比如光滑性、魯棒性以及它的導(dǎo)數(shù)可以用它自身來表示。
sigmoid函數(shù)為:
(1)
其中,x為神經(jīng)元凈輸入。
激活函數(shù)導(dǎo)數(shù)為:
(2)
2)卷積層設(shè)計
圖像經(jīng)過卷積核對特征圖進行卷積,之后再經(jīng)過sigmoid函數(shù)處理在卷積層得到特征映射圖。特征映射圖相比于原圖像,其特征更為明顯突出。
卷積運算其實就是一個加權(quán)求和的過程。離散卷積是本文所選取的方法,規(guī)定卷積核在水平和豎直兩個方向每次都是移動一個像素,即卷積的步長為1。
3)下采樣層的設(shè)計
根據(jù)圖像局部相關(guān)性這一原理,為了降低網(wǎng)絡(luò)的學(xué)習(xí)維度、減少需要處理的數(shù)據(jù)量且保留圖像的有用信息,可以對卷積后的圖像進行下采樣。這里,我們采取的是取卷積層4個像素點平均值為下采樣層的一個像素點的方法。這樣可以降低網(wǎng)絡(luò)規(guī)模。
2.3 網(wǎng)絡(luò)總體結(jié)構(gòu)CNN-0
根據(jù)LeNet-5結(jié)構(gòu),再結(jié)合上文中的對輸入層、輸出層、中間層的設(shè)計,完成了如圖3-1所示的基本網(wǎng)絡(luò)結(jié)構(gòu):
相比于LeNet-5,CNN-0做了一些修改,并非完全按照LeNet-5網(wǎng)絡(luò)結(jié)構(gòu)模型。Sigmoid函數(shù)是本網(wǎng)絡(luò)中的激活函數(shù),選擇這個函數(shù)的好處在于可以讓所有層得到的輸出都在區(qū)間[-1,1]之內(nèi)。網(wǎng)絡(luò)訓(xùn)練的學(xué)習(xí)率固定值為1或者是衰減的學(xué)習(xí)速率。經(jīng)過卷積后的一維向量與輸出層沒有沿用LeNet-5的徑向基函數(shù)網(wǎng)絡(luò),而是采取全連接方式,省去了F6層。
3.3 卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程
在模式識別中,學(xué)習(xí)網(wǎng)絡(luò)有無指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)與有指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)兩個類別。無指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)一般是用來進行聚類分析,本文采取的是有指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)。
卷積神經(jīng)網(wǎng)絡(luò)其實就是從輸入到輸出的一種映射,它可以學(xué)習(xí)大量的映射關(guān)系,只需要用現(xiàn)有的模式對網(wǎng)絡(luò)進行訓(xùn)練,網(wǎng)絡(luò)就能具備映射能力。而不需要輸入與輸出之間的精確的關(guān)系。
訓(xùn)練算法與傳統(tǒng)的BP算法相差無幾(BP算法在第二章有做概述),主要可分為四個步驟,而這四個步驟可以歸為向前傳播階段與向后傳播階段:相前傳播:
1)隨機的從樣本集中獲取一個樣本(A, ),然后將A輸入至網(wǎng)絡(luò)中;
2)根據(jù)公式(3)計算出實際輸出:
(3)
向后傳播:
1)計算和理想輸出之間的差;
2)根據(jù)極小化誤差方法調(diào)整權(quán)值矩陣。
結(jié)語
在手寫數(shù)字識別這一塊,相對來說比較有難度的應(yīng)該就是脫機自由手寫字符識別了,不過本文所研究的并不是這一系統(tǒng),本設(shè)計是一個基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別系統(tǒng),因卷積神經(jīng)網(wǎng)絡(luò)的局部感受野和降采樣以及權(quán)值共享、隱性特征提取等優(yōu)點,它在圖像識別領(lǐng)域得到了非常廣泛的應(yīng)用。此程序是在Caffe這個框架上進行運行的,操作系統(tǒng)為Linux系統(tǒng)ubuntu14.04版本。Caffe是一個開源的深度學(xué)習(xí)框架,也可以說是一個編程框架或者模板框架,它提供一套編程機制。因此,本文所需要實際的卷積神經(jīng)網(wǎng)絡(luò)就可以根據(jù)這個框架來進行構(gòu)建。
參考文獻:
[1]張偉,王克儉,秦臻.基于神經(jīng)網(wǎng)絡(luò)的數(shù)字識別的研究[J].微電子學(xué)與計算,2006年第23卷第8期.
[2]國剛,王毅.應(yīng)用BP神經(jīng)網(wǎng)絡(luò)進行手寫體字母數(shù)字識別[J].電腦知識與技術(shù),2008.
[3]王鵬.基于神經(jīng)網(wǎng)絡(luò)的手寫體字符識別[D]:[碩士學(xué)位論文].北京:北京工業(yè)大學(xué),2002.