◇鶴壁職業(yè)技術(shù)學院電子信息工程學院 張玉嬌
手寫體數(shù)字0-9的識別在原始數(shù)據(jù)集的獲取上較為容易,擁有MNIST的這種成熟的大型標準數(shù)據(jù)集,已經(jīng)被視為是人工智能圖像識別領(lǐng)域研究的入門問題,對其進行研究具有重要的現(xiàn)實意義。在眾多的識別算法中,卷積神經(jīng)網(wǎng)絡(luò)在識別精度上的表現(xiàn)較為突出,而深度學習框架的出現(xiàn)在一定程度上降低了神經(jīng)網(wǎng)絡(luò)模型構(gòu)建的難度和入學門檻。本文基于Tensorflow深度學習框架,詳細討論了如何構(gòu)建LeNet-5卷積神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)手寫體數(shù)字識別的方法,使用MNIST數(shù)據(jù)集進行模型的訓練與評估。
隨著技術(shù)的發(fā)展,人工智能技術(shù)的實現(xiàn)方法逐漸由機器學習算法向深度學習算法發(fā)展,以解決更復雜的問題,不斷擴充人工智能的應(yīng)用領(lǐng)域。深度學習即深度神經(jīng)網(wǎng)絡(luò)學習,它在諸多領(lǐng)域都發(fā)揮了巨大的作用,如圖像處理、語音識別、自然語言處理和視頻處理領(lǐng)域等,其中圖像識別是人工智能應(yīng)用領(lǐng)域的一個重要分支。手寫體數(shù)字識別作為圖像識別領(lǐng)域的一個經(jīng)典問題,對其進行研究具有重要的現(xiàn)實意義。
手寫體數(shù)字識別可采用 K-鄰近算法、支持向量機、貝葉斯分類器的進化策略和梯度下降方法、神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等識別方式。傳統(tǒng)識別算法對手寫數(shù)字進行識別時,其識別率低、識別速度慢。近年來,卷積神經(jīng)網(wǎng)絡(luò)由于良好的推廣能力、記憶力、非線性和自學習能力以及高速運算能力被廣泛用于手寫數(shù)字識別[1]。比如李斯凡等人[2]研究了卷積神經(jīng)網(wǎng)絡(luò),將改進的模型應(yīng)用在MNIS字符庫上,與傳統(tǒng)識別方法進行對比分析,具有較高識別率;汪雅琴等人[3]提出基于LeNet-5模型的手寫數(shù)字識別優(yōu)化方法,通過優(yōu)化卷積層的樣本訓練方式,減少預處理工作量,加快識別速度;茹曉青等人[4]用形變卷積模塊來增強網(wǎng)絡(luò)對數(shù)字
幾何變換的建模能力,提出了一種改進的手寫體數(shù)字識別框架,具有較高的識別精度并減少了訓練的參數(shù)量。
卷積神經(jīng)網(wǎng)絡(luò)在手寫體數(shù)字識別精度方面的表現(xiàn)較為突出,但這種深度神經(jīng)網(wǎng)絡(luò)的實現(xiàn)往往較為困難,增加了初學者的難度,同時研究人員在實現(xiàn)不同網(wǎng)絡(luò)模型的時候通常需重復編寫代碼,增加了無用的工作量。而深度學習框架的出現(xiàn)則有效解決了上述問題,它可更加便捷的實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)模型,具有通用性和可移植性。在眾多深度學習框架中Tensorflow的使用人數(shù)最多、社區(qū)活躍度最高,具有開源性、靈活性、高效性和較強的可擴展性和可移植性,被廣泛應(yīng)用于手字體數(shù)字識別、圖像分類、人臉識別等應(yīng)用領(lǐng)域。本文將基于Tensorflow深度學習框架,構(gòu)建LeNet-5卷積神經(jīng)網(wǎng)絡(luò)模型,探討實現(xiàn)手寫數(shù)字的識別的方法。
Tensorflow是由Google公司開發(fā)的人工智能深度學習框架,于2015年11月正式向公眾開源。它可運行在任何尺寸和形式的主機上,小到智能手機大到大型計算集群。Tensorflow設(shè)計的核心思想是將計算過程表示為一個有向圖,這個有向圖即神經(jīng)網(wǎng)絡(luò)的算法實現(xiàn)圖。計算圖由節(jié)點和邊組成,節(jié)點表示具體的運算操作,邊代表權(quán)重,數(shù)據(jù)以張量的形式在計算圖中按照特定方向流動。
MNIST數(shù)據(jù)集是深度學習領(lǐng)域的一個入門級的計算機視覺數(shù)據(jù)集。該數(shù)據(jù)集來自美國國家標準與技術(shù)研究所(National institute of standards and technology,NIST)。它包含60000個訓練示例圖片和10000個測試圖片,每張圖片分別代表了0-9當中的任意一個數(shù)字,是大小為28px*28px的灰度圖片。數(shù)據(jù)集中的數(shù)據(jù)采集自250個不同人的手寫數(shù)字,其中一半由高中生書寫,一半由人口普查局的工作人員書寫。
圖1 MNIST數(shù)據(jù)集示例圖
LeNet-5是由Yann LeCun(楊立昆)提出的一種經(jīng)典的卷積網(wǎng)絡(luò)結(jié)構(gòu),Yann LeCu被譽為卷積神經(jīng)網(wǎng)絡(luò)之父,LeNet-5模型對后續(xù)卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展起到了良好的推動作用。該網(wǎng)絡(luò)模型一共由8層網(wǎng)絡(luò)構(gòu)成,分別為輸入層、卷積層1、池化層1、卷積層2、池化層2、全連接層1、全連接層2和輸出層,如圖2所示給出了網(wǎng)絡(luò)模型的結(jié)構(gòu)圖。下面介紹下各層結(jié)構(gòu)。
圖2 LeNet-5卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
(1)輸入層:輸入圖片是大小為32*32的灰度圖像,顏色通道為1。
(2)卷積層1:該層尺寸為6個高度和寬度均為5的卷積核,卷積方式采用valid模式,卷積后的輸出結(jié)果為高度、寬度皆為28,深度為6的矩陣。
(3)池化層1:該層采用6個大小為2*2的矩陣對卷積層1的輸出結(jié)果進行valid最大值池化處理,輸出結(jié)果為14*14*6的矩陣。
(4)卷積層2:該層為16個大小為5*5*6的卷積核,仍然與三層輸出結(jié)果進行valid卷積,卷積結(jié)果為10*10*16的矩陣。
(5)池化層2:與池化層1處理方式一樣,仍然采用大小為2*2的矩陣對上層輸入進行valid最大值池化,輸出結(jié)果為5*5*16。
(6)全連接層(1和2):全連接層處理前先拉直第五層的輸出結(jié)果使其成為一維向量,其大小為400(由5*5*16算出),再經(jīng)過2層的全連接神經(jīng)網(wǎng)絡(luò)進行處理,其中輸入為400個神經(jīng)元,第1個全連接層含120個神經(jīng)元,第2含含84個神經(jīng)元。通過兩層的全連接層處理后最終輸出結(jié)果為長度為84的一維向量。
(7)輸出層:該層包含10個神經(jīng)元,對應(yīng)于10個基本數(shù)字,用于進行手寫體數(shù)字的分類。輸出層相當于在全連接層之后添加一層 Softmax 層,通過 Softmax 回歸函數(shù)識別圖像所屬類別的概率,并選擇概率最大的類別對應(yīng)的數(shù)字作為輸出結(jié)果。
當二分類問題擴展為多分類問題時,如手寫體數(shù)字的十分類問題,邏輯回歸就成為了Softmax 回歸。Softmax 回歸函數(shù)的表達式為:。
在此例中,輸出層的神經(jīng)元為10個,分別代表10個基本數(shù)字,Softmax函數(shù)將逐一計算每個神經(jīng)元對應(yīng)類別的概率值,最終選取概率值最大的神經(jīng)元對應(yīng)的數(shù)字作為識別結(jié)果輸出。例如:對于某次輸入,識別為2的概率為87%,識別為5的概率為9%,識別為其他數(shù)字的概率更低,則最終的識別結(jié)果就數(shù)字2。
在Tensorflow框架下使用LeNet-5卷積神經(jīng)網(wǎng)絡(luò)模型來實現(xiàn)手寫體數(shù)字識別的方法如下所示。
(1)加載MNIST數(shù)據(jù)集。MNIST數(shù)據(jù)集包含在Tensorflow框架的example模塊中,可直接讀入,并將數(shù)據(jù)集劃分為訓練集(X0,Y0)和測試集(X1,Y1)兩個集合用于后續(xù)數(shù)據(jù)處理。
(2)數(shù)據(jù)預處理。對讀入數(shù)據(jù)進行處理,使其滿足Tensorflow框架的數(shù)據(jù)規(guī)范。主要進行三個方面的處理:第一,X為60000*28*28的立體矩陣,不滿足Tensorflow的數(shù)據(jù)格式,需增加一個通道數(shù)的維度,使其從三維變?yōu)樗木S張量,因為數(shù)據(jù)集的圖片是灰度圖片,因此通道數(shù)即為1。第二,Y也不符合Tensorflow的數(shù)據(jù)格式,需將其轉(zhuǎn)變成長度為10的向量,轉(zhuǎn)換成one-hot的編碼形式。第三,壓縮X使其變?yōu)?-1之間的數(shù),以使后續(xù)的優(yōu)化算法更容易收斂。
(3)構(gòu)建LeNet-5網(wǎng)絡(luò)模型。因為LeNet-5網(wǎng)絡(luò)模型要求的輸入大小為32*32,而MINSET數(shù)據(jù)集中的圖片大小則為28*28,因此需將第二層的卷積層1的卷積方式設(shè)置為same卷積,以保持輸出結(jié)果大小為28*28*6。
(4)模型訓練。選擇相應(yīng)的優(yōu)化算法,確定Batch和Batch的大小,即可使用訓練集數(shù)據(jù)對模型進行訓練。
(5)模型評估。使用測試集數(shù)據(jù)對模型識別的準確性進行驗證。當優(yōu)化算法選擇Adam算法,Batch size的大小選為200,進行10個Batch循環(huán)訓練后得到的模型參數(shù),在測試集上的識別精度可達99%以上。
本文介紹了Tensorflow深度學習框架的特點和優(yōu)勢,并且詳細介紹了LeNet-5卷積神經(jīng)網(wǎng)絡(luò)模型的結(jié)構(gòu)。Tensorflow深度學習框架作為深度學習的基礎(chǔ)框架,可大大簡化深度神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建難度,降低學習門檻,縮短學習過程,提高學習效率。對于深度學習的經(jīng)典入門問題手寫體數(shù)字識別,采用卷積神經(jīng)網(wǎng)絡(luò)方法進行識別,在準確性、效率和魯棒性方面都明顯優(yōu)于傳統(tǒng)算法。文中以手寫體數(shù)字識別為例探討了在Tensorflow框架中如何構(gòu)建LeNet-5卷積神經(jīng)網(wǎng)絡(luò)模型、模型訓練及模型評估的方法。