天天看點

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

作者:星空

QQ:1973683409

技術交流群:

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

需要源代碼或者測試代碼有問題的可以加星空的QQ或者交流群,星空也是剛剛入門的初學者,希望能和大家多多交流。

一、卷積神經網絡的研究背景

卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一。卷積神經網絡具有表征學習(representation learning)能力,能夠按其階層結構對輸入資訊進行平移不變分類(shift-invariant classification),是以也被稱為“平移不變人工神經網絡(Shift-Invariant Artificial Neural Networks, SIANN)”。

對卷積神經網絡的研究始于二十世紀80至90年代,時間延遲網絡和LeNet-5是最早出現的卷積神經網絡;在二十一世紀後,随着深度學習理論的提出和數值計算裝置的改進,卷積神經網絡得到了快速發展,并被大量應用于計算機視覺、自然語言處理等領域。

卷積神經網絡仿造生物的視知覺(visual perception)機制建構,可以進行監督學習和非監督學習,其隐含層内的卷積核參數共享和層間連接配接的稀疏性使得卷積神經網絡能夠以較小的計算量對格點化(grid-like topology)特征,例如像素和音頻進行學習、有穩定的效果且對資料沒有額外的特征工程(feature engineering)要求。

對卷積神經網絡的研究可追溯至日本學者福島邦彥(Kunihiko Fukushima)提出的neocognitron模型。在其1979和1980年發表的論文中,福島仿造生物的視覺皮層(visual cortex)設計了以“neocognitron”命名的神經網絡。neocognitron是一個具有深度結構的神經網絡,并且是最早被提出的深度學習算法之一,其隐含層由S層(Simple-layer)和C層(Complex-layer)交替構成。其中S層單元在感受野(receptive field)内對圖像特征進行提取,C層單元接收和響應不同感受野傳回的相同特征。neocognitron的S層-C層組合能夠進行特征提取和篩選,部分實作了卷積神經網絡中卷積層(convolution layer)和池化層(pooling layer)的功能,被認為是啟發了卷積神經網絡的開創性研究。

第一個卷積神經網絡是1987年由Alexander Waibel等提出的時間延遲網絡(Time Delay Neural Network, TDNN)。TDNN是一個應用于語音識别問題的卷積神經網絡,使用FFT預處理的語音信号作為輸入,其隐含層由2個一維卷積核組成,以提取頻率域上的平移不變特征。由于在TDNN出現之前,人工智能領域在反向傳播算法(Back-Propagation, BP)的研究中取得了突破性進展,是以TDNN得以使用BP架構内進行學習。在原作者的比較試驗中,TDNN的表現超過了同等條件下的隐馬爾科夫模型(Hidden Markov Model, HMM),而後者是二十世紀80年代語音識别的主流算法。

1988年,Wei Zhang提出了第一個二維卷積神經網絡:平移不變人工神經網絡(SIANN),并将其應用于檢測醫學圖像。獨立于Zhang(1998),Yann LeCun在1989年同樣建構了應用于圖像分類的卷積神經網絡,即LeNet的最初版本。LeNet包含兩個卷積層,2個全連接配接層,共計6萬個學習參數,規模遠超TDNN和SIANN,且在結構上與現代的卷積神經網絡十分接近。LeCun (1989)對權重進行随機初始化後使用了随機梯度下降(Stochastic Gradient Descent, SGD)進行學習,這一政策被其後的深度學習研究廣泛采用。此外,LeCun (1989)在論述其網絡結構時首次使用了“卷積”一詞,“卷積神經網絡”也是以得名。

LeCun (1989)的工作在1993年由貝爾實驗室(AT&T Bell Laboratories)完成代碼開發并被大量部署于NCR(National Cash Register Coporation)的支票讀取系統。但總體而言,由于數值計算能力有限、學習樣本不足,加上同一時期以支援向量機(Support Vector Machine, SVM)為代表的核學習(kernel learning)方法的興起,這一時期為各類圖像處理問題設計的卷積神經網絡停留在了研究階段,沒有得到廣泛應用。

在LeNet的基礎上,1998年Yann LeCun及其合作者建構了更加完備的卷積神經網絡LeNet-5并在手寫數字的識别問題中取得成功。LeNet-5沿用了LeCun (1989) 的學習政策并在原有設計中加入了池化層對輸入特征進行篩選。LeNet-5及其後産生的變體定義了現代卷積神經網絡的基本結構,其構築中交替出現的卷積層-池化層被認為有效提取了輸入圖像的平移不變特征。LeNet-5的成功使卷積神經網絡的應用得到關注,微軟在2003年使用卷積神經網絡開發了光學字元讀取(Optical Character Recognition, OCR)系統。其它基于卷積神經網絡的應用研究也得到展開,包括人像識别、手勢識别等。

在2006年深度學習理論被正式提出後,卷積神經網絡的表征學習能力得到了關注,并随着數值計算裝置的更新開始快速發展。自2012年的AlexNet開始,卷積神經網絡多次成為ImageNet大規模視覺識别競賽(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)的優勝算法,包括2013年的ZFNet  、2014年的VGGNet、GoogLeNet和2015年的ResNet。

二、基于VGGNet-16的卷積神經網絡的結構

VGGNet由牛津大學的視覺幾何組(Visual Geometry Group)提出,是ILSVRC-2014中定位任務第一名和分類任務第二名。其突出貢獻在于證明使用很小的卷積(3*3),增加網絡深度可以有效提升模型的效果,而且VGGNet對其他資料集具有很好的泛化能力。

如今,卷積神經網絡已經成為計算機視覺領域的常用工具,是以有很多人嘗試改善2012年提出的AlexNet來實作更好的效果。比如,在ILSVRC中-2013中表現最好的ZFNet在第一卷積層使用更小的卷積(receptive window size)和更小的步長(stride)。另一種政策是多尺度地在整張圖像上密集訓練和測試。VGGNet則強調了卷積神經網絡設計中另一個重要方面——深度。

VGG比較出名的是VGG-16和VGG-19,最常用的是VGG-16。各種VGG的網絡結構如下:

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

VGG卷積神經網絡的結構

其中,第C列就是在本文中所選用的VGG-16的網絡結構,可以看出VGG-16的卷積神經網絡分為多層卷積接池化層,最後通過全連接配接層經由輸出層輸出分類結果。

三、Mnist手寫數字資料集介紹

MINST資料庫是由Yann提供的手寫數字資料庫檔案,包含70000張手寫數字圖檔和标簽,每張圖檔尺寸為28x28,為了更直覺地展示使用的資料集,我采用了PCA降維技術将其映射在三維坐标系中,如圖3.1所示。在本次實驗中,我們将資料集分成訓練集、測試集以及驗證集,其中,訓練集資料有55000張圖檔,測試集資料占10000張圖檔,驗證集有5000張圖檔。

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖3.1 Mnist手寫資料集三維分布圖

四、基于VGG-16卷積神經網絡的訓練過程

4.1 訓練參數設定

本文實驗訓練參數設定為:1)學習率:在經過了大量的實驗驗證後,本實驗将基礎學習率設為0.0001,學習率衰減率設為0.000001,衰減步長設為1000;2)學習步數:學習總步數設為20000步;3)訓練批次:為了更好的訓練性能,本實驗将訓練批次設為500。

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖4.1 網絡的損失函數曲線圖

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖4.2 網絡的預測精度曲線圖

在整個訓練過程中,我們網絡的損失函數和預測精度如圖4.1和4.2所示,我們可以看到該網絡的損失函數cross_entropy從第0步開始到第20000步處于一個單調下降的趨勢,在14000步之後基本保持1.483不變,而對測試集的預測精度從第0步開始到第20000步處于一個單調上升的趨勢,在14000步之後基本保持0.9787不變。

為了友善研究卷積神經網絡中的各參數的變化會對網絡的精度存在一定的影響,在這裡,我使用了Tensorflow中的資料可視化工具Tensorboard将網絡中的各個節點參數的變化記錄在log事件中,得到了圖4.3。

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示
Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示
Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖4.3 卷積層、全連接配接層以及輸出層的各權重和偏移量的變化直方圖

其中,卷積神經網絡的各層之間的權重和偏移量的變化如圖3.所示,其中,圖3.7(a)為卷積層1中的激活函數、權重以及偏移量的變化曲線,圖3.7(b)為卷積層2中的激活函數、權重以及偏移量的變化曲線,圖3.7(c)為卷積層3中的激活函數、權重以及偏移量的變化曲線,圖3.7(d)為卷積層4中的激活函數、權重以及偏移量的變化曲線,圖3.7(e)為全連接配接層1中的激活函數、權重以及偏移量的變化曲線,圖3.7(f)為卷積層全連接配接層2中的激活函數、權重以及偏移量的變化曲線,圖3.7(g)為輸出層中的激活函數、權重以及偏移量的變化曲線。

五、實驗結果分析

在本節中,通過加載訓練好的網絡模型,将該模型用于Mnist手寫數字的10000張測試集中,實驗結果顯示,有217張圖檔識别錯誤,9783張圖檔識别正确,識别率高達97.83%。在圖5.1中随機展示了25張識别有誤的圖檔,“T”代表的是屬于這張圖檔的真實标簽,“P”代表的是屬于這張圖檔的預測标簽;圖5.2中展示了随機從10000張測試集圖檔中抽取了25張識别結果圖,可以看出,卷積神經網絡對手寫數字的分類效果是相當好的,除了一些意義模糊的圖檔沒有識别出來。

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖5.1 卷積神經網絡預測有誤的圖像

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖5.2 卷積神經網絡預測樣本

為了研究友善,本文作者寫了一個python的類,用于對模型進行性能上的評估,其中,精确率(Precision)、召回率(Recall)、F-Score、準确率(Accuracy)我将會在下一篇部落格中為大家詳細解釋。

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示

圖5.3 卷積神經網絡的Precision-Recall曲線

六、部分代碼展示

Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示
Tensorflow卷積神經網絡識别Mnist手寫數字一、卷積神經網絡的研究背景二、基于VGGNet-16的卷積神經網絡的結構三、Mnist手寫數字資料集介紹四、基于VGG-16卷積神經網絡的訓練過程五、實驗結果分析六、部分代碼展示