,
(佳木斯大學(xué)信息電子技術(shù)學(xué)院,黑龍江 佳木斯 154007)
手寫數(shù)字識(shí)別主要是指人們依靠計(jì)算機(jī)可以智能地識(shí)別出手書寫在紙上的阿拉伯?dāng)?shù)字0-9。手寫數(shù)字識(shí)別是光學(xué)字符識(shí)別技術(shù)的一個(gè)重要方向,同時(shí),它有著十分廣泛的應(yīng)用需求[1]。但是,手寫體數(shù)字識(shí)別技術(shù)主要是識(shí)別出0-9,比光學(xué)字符中分類的類別少很多[2]。手寫體數(shù)字識(shí)別由于它具有獨(dú)特的性質(zhì),很難有固定的手工設(shè)置方式,這就需要算法做到高度的泛化。隨著神經(jīng)網(wǎng)絡(luò)的不斷發(fā)展,數(shù)據(jù)的高維非線性表示非常適用于圖像數(shù)據(jù),其中,包括手寫體數(shù)字識(shí)別[3]。近年來,自編碼神經(jīng)網(wǎng)絡(luò)是一種重要的無監(jiān)督學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。它可以把數(shù)據(jù)映射到中間層,然后再將其還原,這樣,中間層就構(gòu)建成了數(shù)據(jù)的基本表達(dá)式[4]。
自動(dòng)編碼器在1986年被Rumelhart成功的提出,它是一個(gè)由輸入層、隱藏層和輸出層構(gòu)成的典型三層神經(jīng)網(wǎng)絡(luò)[5]。
自動(dòng)編碼器的編碼部分使用非線性映射函數(shù),成功的將輸入數(shù)據(jù)映射到隱藏層單元[6],用h代表隱藏層的神經(jīng)單元激活,數(shù)學(xué)表達(dá)式為:
h=f(x)=sf(wx+p)
(1)
解碼部分的計(jì)算原理與編碼部分相似,利用編碼得到的隱藏層重構(gòu)原始輸入數(shù)據(jù)。解碼函數(shù)的數(shù)學(xué)表達(dá)式是:
(2)
輸出數(shù)據(jù)y可以看作是對(duì)輸入數(shù)據(jù)x的預(yù)測(cè),如果我們可以接受輸出數(shù)據(jù)y與輸入數(shù)據(jù)x的接近程度,就可以說,該自動(dòng)編碼器訓(xùn)練好了[7]。
如果使用重構(gòu)誤差函數(shù)L(x,y)進(jìn)行刻畫y與x的接近程度。
當(dāng)sg為恒等函數(shù)的時(shí):
L(x,y)=||x-y||2
(3)
當(dāng)sg為sigmoid函數(shù)的時(shí):
(4)
(5)
最后迭代計(jì)算JAE(θ)的最小值,求解參數(shù)θ。
實(shí)驗(yàn)中采用手寫數(shù)字?jǐn)?shù)據(jù)集MNIST(Mixed National Institute of Standards and Technology database)作為數(shù)據(jù)源,它是由紐約大學(xué)的Yann Le Cun、Google實(shí)驗(yàn)室的Corinna Cortes和微軟研究院共同提供[8]。手寫數(shù)字?jǐn)?shù)據(jù)集一共有4個(gè)文件,其中包括:訓(xùn)練樣本的標(biāo)簽(t10k-labels-idx1-ubyte)、訓(xùn)練樣本的圖像(t10k-images-idx3-ubyte)、測(cè)試樣本的標(biāo)簽(train-labels-idx1-ubyte)和測(cè)試樣本的圖像(train-images-idx3-ubyte)。
手寫數(shù)字?jǐn)?shù)據(jù)集是一個(gè)包含70000張手寫數(shù)字灰度圖片的計(jì)算機(jī)視覺數(shù)據(jù)集。每一個(gè)樣本都是28*28,即784像素的單一的手寫數(shù)字字符的圖像數(shù)據(jù)。手寫數(shù)字?jǐn)?shù)據(jù)集一共被分為兩部分,其中,一部分是60000行的訓(xùn)練數(shù)據(jù)集(mnist.train)、另一部分是10000行的測(cè)試數(shù)據(jù)集(mnist.test)[9]。其中,60000 行的訓(xùn)練數(shù)據(jù)集(mnist.train)又被拆分為55000行的訓(xùn)練集與5000行的驗(yàn)證集。
60000行的訓(xùn)練數(shù)據(jù)集是一個(gè)形狀為 [60000, 784] 的張量,第一個(gè)維度數(shù)字用來索引圖像,第二個(gè)維度數(shù)字用于索引每個(gè)圖像中的像素點(diǎn)。這個(gè)張量中的每一個(gè)元素表示圖像中像素的強(qiáng)度值,在0到1之間[10]。60000 行訓(xùn)練數(shù)據(jù)集標(biāo)簽都是0到9的阿拉伯?dāng)?shù)字,用于描述給定圖片中的數(shù)字,每一個(gè)類的樣本數(shù)并不是完全相同的。這60000個(gè)訓(xùn)練樣本來自大約250個(gè)不同的測(cè)試人員,并保證訓(xùn)練集與測(cè)試集的不相交。
第一步:導(dǎo)入必要的庫;第二步:加載數(shù)據(jù)集;第三步:設(shè)置訓(xùn)練的參數(shù)(學(xué)習(xí)率、訓(xùn)練迭代次數(shù)、每次訓(xùn)練的數(shù)據(jù)多少、每隔多少次顯示一次訓(xùn)練結(jié)果、顯示示例圖片數(shù)量);第四步:網(wǎng)絡(luò)參數(shù)(隱藏層數(shù)、隱藏層神經(jīng)元數(shù)量);第五步:tf Graph輸入;第六步:權(quán)重初始化;第七步:偏置值初始化;第八步:開始編碼;第九步:開始解碼;第十步:構(gòu)造模型;第十一步:預(yù)測(cè);第十二步:實(shí)際輸入數(shù)據(jù)當(dāng)作標(biāo)簽;第十三步:定義代價(jià)函數(shù)和優(yōu)化器,最小化平方誤差;第十四步 初始化變量;第十五步 運(yùn)行Graph(總的batch、開始訓(xùn)練、展示每次訓(xùn)練結(jié)果、顯示編碼結(jié)果和編碼后結(jié)果、對(duì)比原始圖片重建圖片)
圖1 優(yōu)化器為RMSPropOptimizer、學(xué)習(xí)率為0.02、
隱藏層為2層原始圖片與重建圖片
圖2 優(yōu)化器為AdamOptimizer、學(xué)習(xí)率為0.02、
隱藏層為2層原始圖片與重建圖片
圖3 優(yōu)化器為AdamOptimizer、學(xué)習(xí)率為0.02、
隱藏層為3層原始圖片與重建圖片
圖4 優(yōu)化器為AdamOptimizer、學(xué)習(xí)率為0.01、
隱藏層為2層原始圖片與重建圖片
首先構(gòu)造一個(gè)輸入層含有784個(gè)節(jié)點(diǎn)、第一個(gè)隱藏層為256個(gè)節(jié)點(diǎn)、第二個(gè)隱藏層為128個(gè)節(jié)點(diǎn)、學(xué)習(xí)率為0.02、訓(xùn)練批次為20、顯示示例圖片數(shù)量為10個(gè)的自編碼網(wǎng)絡(luò),使用最小二乘法作為代價(jià)函數(shù),對(duì)原始數(shù)據(jù)集和輸出數(shù)據(jù)集進(jìn)行平方差、取均值運(yùn)算,令其優(yōu)化器為RMSPropOptimizer與AdamOptimizer,觀察實(shí)驗(yàn)結(jié)果,優(yōu)化器為RMSPropOptimizer對(duì)應(yīng)的實(shí)驗(yàn)結(jié)果為圖1與圖5;優(yōu)化器為AdamOptimizer對(duì)應(yīng)的實(shí)驗(yàn)結(jié)果為圖2與圖6。
從圖1、圖2、圖5、圖6可以看出,采用了自編碼神經(jīng)網(wǎng)絡(luò)對(duì)手寫數(shù)字識(shí)別具有較好的識(shí)別效果。圖1與圖2進(jìn)行比較、圖5與圖6進(jìn)行比較,發(fā)現(xiàn)不同優(yōu)化器所獲得的識(shí)別效果不同,優(yōu)化器為AdamOptimizer的識(shí)別效果比優(yōu)化器為RMSPropOptimizer的識(shí)別效果更好一些。
圖5 優(yōu)化器為RMSPropOptimizer、
學(xué)習(xí)率為0.02、隱藏層為2層代價(jià)
圖6 優(yōu)化器為AdamOptimizer、
學(xué)習(xí)率為0.02、隱藏層為2層代價(jià)
為探究自編碼神經(jīng)網(wǎng)絡(luò)的隱藏層層數(shù)對(duì)識(shí)別效果的影響,分別構(gòu)造隱藏層層數(shù)為2層與3層的優(yōu)化器為AdamOptimizer、學(xué)習(xí)率為0.02、訓(xùn)練批次為20、顯示示例圖片數(shù)量為10個(gè)的自編碼神經(jīng)網(wǎng)絡(luò)。隱藏層層數(shù)為2層的自編碼神經(jīng)網(wǎng)絡(luò):輸入層含有784個(gè)節(jié)點(diǎn)、第一個(gè)隱藏層為256個(gè)節(jié)點(diǎn)、第二個(gè)隱藏層為128個(gè)節(jié)點(diǎn),對(duì)應(yīng)的實(shí)驗(yàn)結(jié)果為圖2與圖6;隱藏層層數(shù)為3層的自編碼神經(jīng)網(wǎng)絡(luò):輸入層含有784個(gè)節(jié)點(diǎn)、第一個(gè)隱藏層為512個(gè)節(jié)點(diǎn)、第二個(gè)隱藏層為256個(gè)節(jié)點(diǎn)、第三個(gè)隱藏層為128個(gè)節(jié)點(diǎn),對(duì)應(yīng)的實(shí)驗(yàn)結(jié)果為圖3與圖7。
對(duì)比圖2與圖3、6與圖7,可以發(fā)現(xiàn)在其他方面不做任何改變,只是將隱藏層為2層改成了隱藏層為3層,它的識(shí)別效果并沒有變好,反而下降了。當(dāng)隱藏層為3層時(shí)所花費(fèi)的時(shí)間不僅變長了,而且由于它出現(xiàn)過擬合使得效果變差了。
圖7 優(yōu)化器為AdamOptimizer、
學(xué)習(xí)率為0.02、隱藏層為3層代價(jià)
圖8 優(yōu)化器為AdamOptimizer、
學(xué)習(xí)率為0.01、隱藏層為2層代價(jià)
為探究自編碼神經(jīng)網(wǎng)絡(luò)的參數(shù)對(duì)識(shí)別效果的影響,構(gòu)造一個(gè)輸入層含有784個(gè)節(jié)點(diǎn)、第一個(gè)隱藏層為256個(gè)節(jié)點(diǎn)、第二個(gè)隱藏層為128個(gè)節(jié)點(diǎn)、優(yōu)化器為AdamOptimizer、訓(xùn)練批次為20、顯示示例圖片數(shù)量為10個(gè)的自編碼神經(jīng)網(wǎng)絡(luò),將學(xué)習(xí)率為0.02改為0.01,對(duì)應(yīng)圖4與圖8。
對(duì)比圖2與圖4、圖5與圖8,可以發(fā)現(xiàn)在其他方面不做任何改變,通過調(diào)節(jié)參數(shù)可以使得cost值繼續(xù)減小。
通過實(shí)驗(yàn)研究,結(jié)果表明自編碼神經(jīng)網(wǎng)絡(luò)在手寫數(shù)字識(shí)別中能達(dá)到很好的識(shí)別效果。經(jīng)過優(yōu)化器為RMSPropOptimizer與優(yōu)化器為AdamOptimizer比較發(fā)現(xiàn)不同優(yōu)化器所獲得的識(shí)別效果不同,并且,優(yōu)化器為AdamOptimizer的識(shí)別效果比優(yōu)化器為RMSPropOptimizer的識(shí)別效果更好一些。由于隱藏層為3層出現(xiàn)的過擬合情形,帶來了識(shí)別效果不如隱藏層為2層的神經(jīng)網(wǎng)絡(luò),同時(shí),隱藏層為3層的神經(jīng)網(wǎng)絡(luò)所花費(fèi)的時(shí)間也更長一些。通過調(diào)節(jié)參數(shù)可以使得cost值繼續(xù)減小,效果達(dá)到更優(yōu)。下一步將優(yōu)化網(wǎng)絡(luò)參數(shù)值、優(yōu)化器,提高自編碼神經(jīng)網(wǎng)絡(luò)模型對(duì)手寫數(shù)字的識(shí)別精度及識(shí)別效率,同時(shí)可將自編碼神經(jīng)網(wǎng)絡(luò)模型移植到人臉識(shí)別領(lǐng)域,在人臉數(shù)據(jù)集上進(jìn)行測(cè)試驗(yàn)證。
參考文獻(xiàn):
[1] 柳回春, 馬樹元, 吳平東, 等. 手寫體數(shù)字識(shí)別技術(shù)的研究[J]. 計(jì)算機(jī)工程, 2003, 29(4): 24-61.
[2] 幸堅(jiān)炬, 李軍, 謝贊福. PNN在手寫體數(shù)字識(shí)別中的應(yīng)用[J]. 現(xiàn)代計(jì)算機(jī): 專業(yè)版, 2016(8): 20-23.
[3] 張充, 史青宣, 苗秀芬, 等. 基于BP神經(jīng)網(wǎng)絡(luò)的手寫體數(shù)字識(shí)別[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2008, 18(6): 128-130, 163.
[4] 史雪瑩. 基于自編碼神經(jīng)網(wǎng)絡(luò)的手寫體數(shù)字識(shí)別中關(guān)于特征表達(dá)的研究[J]. 電腦與電信, 2017(Z1): 38-39+48.
[5] 鄧俊鋒. 基于稀疏自動(dòng)編碼器和邊緣降噪自動(dòng)編碼器的深度學(xué)習(xí)算法研究[D]. 武漢科技大學(xué), 2016.
[6] 梁湘群. 基于Gabor特征與深度自動(dòng)編碼器的笑臉識(shí)別方法[D]. 五邑大學(xué), 2015.
[7] Baldi P, Guyon G, Dror V, et al. Autoencoders, Unsupervised Learning, and Deep Architectures Editor: I[J]. Journal of Machine Learning Research, 2012.
[8] 劉曉春,陳煉.基于深度學(xué)習(xí)的手寫體圖像分類識(shí)別研究[J].江西通信科技, 2016(04): 35-39.
[9] 李瓊, 陳利, 王維虎. 基于SVM的手寫體數(shù)字快速識(shí)別方法研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2014, 24(2): 205-208.
[10] 章敏敏, 徐和平, 王曉潔, 等. 谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用[J]. 微型機(jī)與應(yīng)用, 2017, 36(10): 58-60.