張新勇 甘恒 李昌夏 加文浩



摘要:基于卷積神經網絡在手寫數字識別上的應用,對卷積神經網絡模型進行介紹。本實驗使用python編程語言在Keras上搭建模型,并對模型進行訓練。實驗數據集為MNIST。模型訓練完畢后,對準確率進行評估。最后對測試數據進行預測以及利用混淆矩陣對哪些數字準確率較高和哪些數字容易混淆進行評估。
關鍵詞:人工智能;手寫數字識別;卷積神經網絡;Keras
Abstract: Based on the application of convolutional neural network in handwritten digit recognition, the model of convolutional neural network is introduced. In this experiment, Python programming language is used to build the model on Keras, and the model is trained. The experimental data set was MNIST. After the training of the model, the accuracy was evaluated. Finally, the test data are predicted and the confusion matrix is used to evaluate which numbers are more accurate and which numbers are easy to be confused.
Key words: AI; handwritten digit recognition; CNN; Keras
由于手寫數字在日常生活中的大量運用,利用計算機進行手寫數字的自動識別成了研究熱點。手寫數字根據每個人的習慣會千差萬別,所以依靠線性模型不能進行準確的識別[1]。過去人們也提出了基于反向傳播神經網絡的數字識別方法、類中心歐式距離、貝葉斯分類算法[2]等來進行手寫數字識別,但效果都不盡人意。本文利用基于深度學習的卷積神經網絡來處理手寫數字識別問題,相比以往基于機器學習的算法,它有以下優點:(1)特征提取高效:不需要提前設計好特征的內容和數量,卷積神經網絡可以自己訓練,自我修正,來得到好的效果;(2)數據格式的簡易性:對數據格式不需要過多處理;(3)參數數目比較少:只需要初始化給每個神經元隨機賦予一個權重和偏置項,隨后模型會自己修正參數,使其達到最優。綜上,卷積神經網絡不僅克服了傳統方法預處理時的弊端,還提高預測的準確率。
1卷積神經網絡簡介
卷積神經網絡簡稱CNN,其核心概念主要是稀疏連接、共享權值和池化。稀疏連接主要是通過對數據的局部區域進行建模,以發現局部的一些特性。共享權值可以使需要優化的參數變少。子采樣解決了圖像的平移不變性。這些特點也降低了網絡模型過擬合的程度。卷積神經網絡主要有卷積層、下采樣層和全連接層。卷積神經網絡利用卷積層和下采樣層交替疊加,得到特征的高層抽象,然后對高層抽象的特征進行全連接的映射,最終實現分類。
2相關技術
2.1 Keras框架
Keras是TensorFlow官方的高層API[3]。Keras是一個高層神經網絡API,并對TensorFlow等有較好的優化。Keras支持Python、R等多種語言。同Keras相比,Tensorflow更注重各種深度學習模型的細節,但是會有更大的代碼量,耗費更多的時間進行開發。
2.2卷積神經網絡
卷積神經網絡是對多層網絡模型的一個改進,由多個卷積層和池化層交替連接而成[4]。在CNN中,充分利用圖像數據局部相關性的特點,盡可能減少網絡中參數個數,方便對其求解。
2.2.1卷積運算
卷積層的意義是利用卷積核對原圖像進行處理,處理后的圖像保留原圖像的一些特征。當用不同的卷積核處理時,處理后的多個圖像就會對原圖像不同地方的特征進行反映。卷積運算的運算方式:(1)以隨機的方式產生filter weight大小是3×3;(2)對原始圖片從左至右,從上至下依次選取3×3的矩陣;(3)圖像選取的3×3矩陣與filter weight3×3矩陣相乘。
以上面的方式就可以完成所有圖像的處理。卷積運算不會改變圖像的大小。卷積運算后的效果很類似于濾鏡效果,可以幫助我們提取輸入的不同特征,例如邊緣、線條和角等。
2.2.2池化運算
池化運算可以對圖像進行縮減取樣[5],池化采樣不會改變圖像的數量,但會改變圖像的大小。上圖所示,就是用局部特征的最大值來表達此區域的特征。縮小了圖像的大小,減少了數據量。這在一定程度上也控制了過擬合[6]。
3卷積神經網絡的手寫數字識別實驗
3.1數據源與處理
本實驗采用MNIST數據集作為實驗數據。MNIST數據集共有訓練數據60000項,測試數據10000項。每一項都由images(單色數字圖像)和labels(真實數字)所組成。數據圖像預處理分為以下兩個步驟:圖像是28×28的二維圖像,利用reshape函數將圖像轉化為長度為784的一維向量,并且轉換為Float類型;將數字值進行歸一化:圖像每個像素點灰度的深淺都是用0至255的數字值來表示。用255除每個值,使其轉化為0到1之間的值,便于后續的計算。label數據處理:label標簽段處理之前為0-9的數字,以One-Hot Encoding(一位有效編碼)轉換為10個0或1的組合,正好對應輸出層10個神經元。
3.2實驗過程
數據預處理會產生Features(數字圖像特征值)與Label(數字真實的值),接著會建立卷積神經網絡模型。輸入訓練數據與Label,執行10個訓練周期來對模型進行訓練,并使用測試數據評估模型準確率。使用已完成的模型,輸入測試數據進行預測。