












摘要:文章利用Tensorflow深度學習結構來構建神經網絡模型,并采用激活函數對MINIST進行訓練;加入特征轉換過程,利用梯度下降優化器,將數據降維;在輸出層上將全連接模型和Softmax層相結合,經過交叉驗證,達到90%以上的識別率。
關鍵詞:Tensorflow;MNIST;梯度下降優化器;全連接模型
doi:10.3969/J.ISSN.1672-7274.2023.02.044
中圖分類號:TP 3" " " " " " " " 文獻標示碼:A" " " " " " " " " 文章編碼:1672-7274(2023)02-0-04
Handwritten Digit Recognition Based on Tensorflow Framework
LI Linfeng, CHEN Jiayi, ZHENG Jiawei, LI Tong, WU Junqin
(School of Computer Science, Southwest Petroleum University, Chengdu 610500, China)
Abstract: This paper uses Tensorflow deep learning structure to build neural network model, and uses activation function to train MINIST; Add feature transformation process and use gradient descent optimizer to reduce data dimension; In the output layer, the full connection model is combined with the Softmax layer. After cross validation, the recognition rate is more than 90%.
Key words: Tensorflow; MINIST; gradient descent optimizer; full connection layer
0" "引言
手寫體數字識別的實質就是預測,預測出該圖片屬于哪一個類別就認為這幅圖片則為哪一個數字。從圖1可以看出,MNIST的數據集提供了幾張手寫數字的圖片,圖片總共10個類別,從0到9,總共10個阿拉伯數字。利用神經網絡的方法,從圖1中的手寫圖像中提取出相應的數字。
1" "MNIST數據集
MNIST的官方網站上可以下載這些數據,其中主要有表1中的四個文件。
2" "在TensorFlow中實現神經網絡
2.1 實驗核心原理
實驗核心原理如圖2所示。
2.1.1 整體結構
如圖2所示,輸入為一幅28×28像素的單通道圖像(數據集中的每一幅圖像都是灰度圖像,所以本文中的每一幅圖片均屬于一個單通道圖像),均有784的特征(x1,x2,…x784)。
每個輸入與10個神經元分別連接,并最終輸出相應的10個數值。每個連接的邊都有一個權重,例如,x1和第一個神經元相連有一個權重,x2與第二個神經元相連有一個權重……,每個輸入都和10個神經元相連有10個權重,則一共有784個特征,所以每一幅手寫體數字圖像一共有7 840個權重w。接著,這里要產生10個輸出,我們在每一個輸出上加一個偏置b,偏置對應每一個圖像特征的數量是10。經過簡單的運算產生10路輸出,這些輸出在Softmax的擠壓下產生了10個概率p,其中,這10個概率都介于[0,1],并且這10個概率之和為1。例如,其中一路的數字,經過計算,在Softmax()函數的作用下產生了10個概率,第一個的概率是0.001,第二個概率是0.635……,這10個概率代表這個輸入的數字屬于0到9這10個數字分別的概率,本文取其中最大的概率。通過觀察發現,這一組概率中0.635是最大的,本文則用0.635所在的數組標簽作為本次實驗預測的結果,它的結果是1,則這幅手寫體數字圖像的這個特征的預測值為1。
2.1.2 輸入層
對于一個手寫體數字圖像來說,原始的圖像為28×28像素,我們將這一單通道(數據集中的每一個圖像是灰度圖像,因此僅有一條信道)從圖像中的每個像素中抽取出來作為一個特征。這樣每一個像素拿出來做一個特征,一共是28×28像素=784像素的特征。然后我們用x1,x2......x784來表示這784個特征。最終這一列x就是本文的輸入層。
2.1.3 全連接模型
后面是一個全連接模型,這個全連接模型要輸出10個類別的數字,所以它有10個神經元(圖2中用一列圓圈表示)。每個輸入和每個神經元都是連在一起的,如x1要和全連接層中的10個神經元相連。每一條相鄰的邊都有一個權重值,比如,x1和第一個神經元相連有一個權重,x2與第二個神經元相連有一個權重……,一共有784個特征,所以一共有784個權重。這里要產生10個輸出,我們在每一個輸出上加一個偏置b,所以這里偏置的數量是10。
2.2 定義數據
2.2.1 讀取數據集
由于數據集已經被深度學習工作者標準化,本文不需要再次進行數據預處理。很多深度學習平臺都提供了專門的API來讀取MNIST數據集,所以本文也將不再過多闡述如何用代碼來讀取MNIST數據集。通過執行一個簡單的讀取語句:mnist =input_data.read_sets(\"MNIST_data/\",one_hot=True)來檢測TensorFlow中是否有數據。讀取時本文創建一個對象mnist,這個對象指定從哪一目錄下進行讀取,如果目錄下已經有了數據,將不再下載數據,反之,read_data_sets函數將執行一次下載操作,從網上指定的地方將數據集下載下來,下載到這個目錄下,然后執行讀取并轉換成獨熱編碼。
2.2.2 圖像標簽的one-hot(獨熱編碼)表示
原始圖片的標簽為0至9,每一個數字由一行十列的向量來代表,每一個向量就是one-hot的表示方式。one-hot是“一位有效編碼”。N維向量代表N個類別,每一類都占有單獨的一位,并且在任意時刻,one-hot代表中僅有一個是1,其余全部為0。
2.2.3 占位符
占位符將填充在評估計算圖時傳遞的值,在訓練過程中調整權重和偏差的值,TensorFlow2提供了不同的變量。權重的初始值將遵循正態分布,而偏差的值為1.0。
(1)輸入占位符。聲明N行784列的輸入占位符。本文將每一個手寫體數字圖像拉伸成為一個一維的數據,因為對于本文所使用的全連接模型來說,只能接收一維的數據。如果直接將實際上均是二維的矩陣手寫體數字圖像發送給全連接模型,全連接模型將無法識別并接收這一數據。所以本文將每一幅圖像拉伸成784列的行向量,如圖3所示。
圖3表示N個圖像,每個圖像有784個特征。
(2)輸出占位符。聲明N行10列的輸出占位符。N個樣本一一對應一個真實的類別(0~9中的一個數字)。比如,第一個樣本的真實類別為1,而數字1則可以用獨熱編碼的方式表示出來,所有輸出大致如圖4所示。
獨熱編碼表示預測出的N個樣本的數字。
綜上所述,輸入是N行784列的數據,真實類別是N行10列的輸出數據。本文預測的結果其實也是N行10列,不過預測的結果和真實的結果可能會有所偏差。
2.3 搭建模型
2.3.1 神經網絡輸出表達式
首先利用tf.matual(x,w)+b作為神經網絡輸出的表達式,本文的神經網絡實際上是一個簡單的線性計算。接著,將輸出值交給softmax()函數擠壓,轉換成區間為[0,1]的相對概率[1]。
2.3.2 利用Tensorflow識別MNIST
以下以TensorFlow為工具,編寫一個神經網絡數字識別程序,使用的機器學習方法是Softmax回歸。
Softmax回歸是一種從logistics回歸模型直接轉換而來的線性多類別分類模型。不同之處是,logitics回歸模型為兩類分類模型,而Softmax模型為多類分類模型。在手寫體數字識別問題中,共有10種類別(0~9類),我們想要計算將其歸類為不同類別的可能性。假設屬于9的概率是70%,屬于1的概率為10%,則最后的模型概率預測的就是概率最大的那個類別。
Softmax函數最大的作用就是把各個類別的“打分”轉換成合理的的概率。比如,一個樣本可以分成三類:第一類的打分為a,第二類的打分為b,第三類的打分為c。分數越高,屬于這一類的幾率就越大,但分數本身不能代表概率,分數可以是負的,也可以是很大的,但是概率要求是0到1,并且三種類型的概率合計為1。因此,通過采用軟件Softmax函數,可以把(a、b、c)轉換為一個合理的概率值。
假定x為單一樣本的特性,而w、b為Softmax模型的參數。在MNIST數據集中,x代表輸入的圖片,表示一個784維的矢量,w表示一個矩陣,它的形狀是(784,10),b表示一個10維矢量,10表示類別數。
2.3.3 交叉熵
作為預測的結果,將預測的結果和實際得到的結果構建一個交叉熵作為損失函數,根據交叉熵的公式,使用實際的y值乘以預測的y值的對數然后求和,求和以后再取“-”。“交叉熵”是一種常見的成本函數,如式(1)所示。
式中,y為預測的概率分布;y'為實際輸入值[2]。實現方法如下:①創建占位符輸入正確值;②計算交叉熵。
在計算出總體樣本誤差cross_entropy之后,將cross_entropy求均值得到本次訓練中每個樣本的平均誤差,作為本次訓練的損失函數。
2.3.4 梯度下降算法
將損失函數cost傳遞給梯度下降優化器train.GradientDescentOptimizer(),再指定一個學習率lr=0.1。其中,學習率是一個非常敏感的參數,它的設置范圍主要根據以往經驗得來,不能設置太大,也不能設置太小,設置太大可能出現不收斂的情況,設置太小可能出現收斂太慢的情況。梯度下降器優化器結束以后,本文調用梯度下降優化器的minimize(),使得損失函數的值優化到最小。
通過公式層層推導和嵌套,本文得出在梯度下降過程中,w和b都會被不停地調整。優化到最小的cost值的時候,也就得出最優的參數x和w的值。如圖5所示。
2.4 執行訓練
2.4.1 會話
前面的部分是進行運算的結點。而會話則可以看作是結點進行運算的上下文。在計算過程中保存變量,同時變量的值會被保存下來,事實上變量的值就是被保存在會話中的。在處理變量之前,必須先對其進行初始化,這其實就是將它的初始值保存在一個會話中。
2.5 模型評估
2.5.1 用測試集中的數據評估模型
本文利用了在測試集中的數據來評估該模型,首先確定一個正確的比率。我們在equal()函數對預測結果pred_y和真實結果 進行比較,argmax()則是將預測結果和真實結果的一維數組中最大值的索引分別取出來。如果預測正確,返回true,如果預測失敗,返回1,equal()則返回布爾類型的數組,如圖6所示。
2.5.2 預測性分析
通過實驗發現,迭代次數越多,損失值越小,預測結果正確率越高,預測結果越準確。本次實驗選擇迭代300次的迭代次數來進行模型的訓練。
(1)訓練過程結果截圖如圖7所示。
(2)訓練過程中損失函數可視化分析,如圖8所示。
(3)預測結果如圖9所示。
(4)結果可視化如圖10所示。
3" "探索性分析
本文在對手寫體數字識別進行研究的同時,雖然取得了一些實驗效果。但是由于本文適用于新手計算機視覺入門,進行手寫體數字訓練而采用的模型較為簡單。通過實驗證明,簡單的Softmax回歸的識別率大概在90%左右。根據大量的學術資料,若本文能利用卷積神經網絡(CNN)、K鄰近適應算法(KNN)等算法,則可提高模型的正確性,再者如果優化神經網絡結構,增加神經網絡的層數,也會增加一定的正確率。
總之,由于對手寫體數字識別性能要求的日益提高,其應用前景也日益廣闊。在科技越來越發達的今天,手寫體數字識別系統的應用將會得到更大程度的發展和應用。
4" "結束語
論文是在TensorFlow的基礎上,采用Softmax回歸和全連接模型對圖像預處理、特征提取、人工神經網絡等發面進行了深入研究并進行了手寫體數字訓練。Tensorflow作為深度學習的基礎框架,可大大簡化神經網絡模型的構建難度,降低學習門檻,縮短學習過程,提高學習效率。實驗數據表明,本文較為簡單的模型的識別率大概只有90%左右。
由于本文的的特征提取模型、訓練模型的算法較為簡單,比如只使用Softmax遞歸算法對MNIST數據進行分類識別,所以在測試集下的平均準確率在90%左右。未來,若是能夠開發出新的特征提取的算法,利用更好的特征融合方式,對模型進行訓練優化,采用多種深度學習模型以及數量級地增加模型的訓練次數,本文手寫體數字的準確性,效率和魯棒性等方面將會得到明顯提高。■
參考文獻
[1] 車振軍.基于深度學習的蛋白質亞細胞定位方法研究[D].南京:東南大學,2020.
[2] 蔣銳鵬,姑麗加瑪麗·麥麥提艾力,安麗娜.基于長短期記憶神經網絡的手寫數字識別[J].計算機技術與發展,2020,30(02):94-97.