


摘要:卷積神經網絡是近10年來推動機器學習應用和發展最快的一項技術分支,在圖像分類中取得了出色的成績。為進一步梳理卷積神經網絡圖像分類的流程策略,本文基于TensorFlow深度學習框架,下載相關公開數據集,構建人工神經網絡模型,采用數據集交叉驗證的方式訓練,并從中歸納出一套數據預處理、建模、訓練和評估的實踐策略,以期望加深對機器學習流程思路的指導。
Abstract: Convolutional neural networks are the fastest branch of technology that has promoted the application and development of machine learning in the past 10 years, and have achieved outstanding results in image classification. In order to further sort out the convolutional neural network image classification process strategy, this paper based on the TensorFlow deep learning framework, downloads relevant public data sets, constructs artificial neural network models, trains with data set cross-validation, and summarizes a set of practical strategies for data preprocessing, modeling, training and evaluation, in order to deepen the guidance of machine learning process ideas.
關鍵詞:實踐策略;機器學習;卷積神經網絡;交叉驗證;圖像分類
Key words: practical strategies;machine learning;convolutional neural network;cross-validation;image classification
中圖分類號:TP391.41;TP18? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號:1006-4311(2020)09-0205-03
1? 研究目的與意義
當前,由人工智能引領的新一輪科技革命和產業變革方興未艾,各領域都在加強推動機器學習與傳統行業的跨界融合。其中卷積神經網絡正是推動機器學習的關鍵技術之一,其在圖像分類任務中取得了出色的成績。為了梳理卷積神經網絡建模實踐的流程策略,本文基于TensorFlow深度學習框架,構建卷積神經網絡的圖像分類模型,通過數據預處理、模型設計與搭建、迭代訓練和預測評估等步驟的研究,設計出一套有效的神經網絡圖像實踐策略,最終達到預期的分類效果。
2? 實踐開發環境
本實踐采用了Python + TensorFlow + Keras 的開發環境進行編程和模型訓練。其中Python編程語言結構清晰,擁有豐富的標準庫和強大的第三方生態系統,可以高效的實現復雜的機器學習算法;TensorFlow是Google開發的強大深度學習開源框架,可以方便的進行高性能數值計算;Keras屬于TensorFlow的高級API,封裝了多個用于深度學習的模塊組件,能夠高效快速的搭建復雜的神經網絡模型。
3? 數據預處理
本文用于機器學習實踐的數據選自百度大腦AI Studio平臺上的公開數據集,數據集的來源網址:https://aistudio.baidu.com/aistudio/datasetDetail,該數據集的內容為一套0-9的外國數字手勢圖片,每個數字手勢的采樣圖片約為205個左右,整套數據集共有2462張,圖片像素為100*100ppi。不同手勢圖片之間存在一定的相似性,該數據集的樣本如圖1所示。
在數據預處理過程中,利用TensorFlow、Numpy及os庫對數據集圖片進行預處理,其中包括圖像裁剪、圖像增強和圖像格式轉換等操作,實現去除非目標區域的干擾、增強圖像特征、降低圖像維度等效果,在一定程度上提高了神經網絡圖像分類的準確率。
本例將數據集的標簽轉換為獨熱編碼,通過獨熱編碼將標簽類別的離散特征取值擴展到歐式空間,標簽類別的某個取值就對應于歐式空間的某個點,這樣使得標簽類別特征之間的距離計算更加合理。實踐中利用了Sklearn庫中的OneHotEncoder方法將數據集的label進行Onehot獨熱編碼處理。
4? 模型設計與構建
為了提升卷積神經網絡模型的分類效果,實現對新數據做出良好的預測,將數據集劃分為三個子集(訓練集、驗證集和測試集),其中訓練集用于訓練模型,驗證集用于評估訓練集的預測結果,測試集用于測試模型的準確率。在每次訓練迭代時,都對訓練數據進行訓練并評估驗證數據,并基于驗證數據的評估結果來指導選擇和更改神經網絡模型的超參數,以此來大幅降低模型過擬合的機率。模型訓練流程如圖2所示。
本分類任務屬于邏輯回歸,如果采用均方誤差損失(MSE),其損失函數的結果為非凸函數,存在多個極小值,之后采用梯度下降法,容易導致陷入局部最優解。故損失函數應采用對數損失,即交叉熵損失,其損失函數定義如下:
其中:yi為標簽值;y′i為預測值。
另外,對于多分類問題,采用Softmax算法將每一個類別分配為一個小數表示的概率,使分類問題的預測結果更加明顯,不同類別之間的差距更大,便于分類結果的判斷。
本例機器學習過程中搭建的人工神經網絡模型為:2層卷積+2層池化+3層全連接,網絡結構如圖3所示。
該人工神經網絡通過Keras進行構造,網絡各層結果描述如表1所示。
5? 模型訓練
由于本次實踐中圖片訓練集較小,故采用了交叉驗證的方式將圖片數據集進行分割,然后分別進行訓練,循序得出最優的模型。
如圖4所示,將圖片訓練與驗證數據進行平均分割,共分割為四等份,每等份的圖片樣本為500個,即4折交叉驗證4-fold。在訓練過程中,每次都用3份數據來訓練模型,剩余1份數據用來驗證之前3份數據訓練出來模型的準確率,系統記錄準確率。然后再從4份數據中取出另外3份進行訓練,剩余1份進行驗證,再次得到另一個模型的準確率,至到所有4份數據都做過1次驗證集,也即驗證集名額循環了一圈,交叉驗證的過程就結束。最終留下準確率最高的模型,保存其訓練參數。
在程序設計中,定義空列表all_history = [],用于記錄四折訓練過程中的歷史數據。將四折訓練結果進行對比,其中loss為訓練集損失值,acc為訓練集準確率,val_loss為驗證集損失,val_acc為驗證集準確率,在訓練超參數相同的情況下,結果如表2所示。
通過綜合對比,可以得出第一折數據的訓練綜合效果最優,其訓練超參數epochs=25, batch_size=50,優化器選用Adam,學習率設定0.003,損失函數選用'categorical_crossentropy',卷積層的激勵函數采用Relu函數。
6? 模型評測
在模型評測階段,使用剩余樣本圖片進行預測,這部分樣本圖片是訓練模型之前從未見過的,利用matplotlib顯示部分圖片的預測分類結果,可見預測結果全部正確,結果如圖5所示。
利用Keras中的evaluate()方法對測試數據集進行測評,可以得出模型的損失loss為0.6217,準確率acc為0.9016,分類效果較好。
7? 結語
本文利用TensorFlow深度學習框架,對卷積神經網絡圖像分類的實踐策略進行了研究,其中運用數據集交叉驗證的訓練方式,循序迭代得出最優的模型,使測試數據集的識別正確率達到90.16%,達到預期效果。該實踐策略為搭建神經網絡模型處理圖像分類問題提供了一套創新思路,具有一定的參考意義。
參考文獻:
[1]張良均,王路.Python數據分析與挖掘實戰[M].北京:機械工業出版社,2015.
[2]段小手.深入淺出Python機器學習[M].北京:清華大學出版社,2018.
[3]楊澤明,劉軍,薛程,于子紅.卷積神經網絡在圖像分類上的應用綜述[J].人工智能與機器人研究,2017,7(01):17-24.
[4]陳瑞瑞.基于深度卷積神經網絡的圖像分類算法[J].河南科技學院學報(自然科學版),2018,46(4):56-60.
[5]蔣昂波,王維維.ReLU激活函數優化研究[J].傳感器與微系統,2018(2):50-52.
[6]袁文翠,孔雪.基于TensorFlow深度學習框架的卷積神經網絡研究[J].微型電腦應用,2018(2):29-32.
基金項目:受發改委“互聯網+”支撐類項目礦冶智能優化制造云服務(發改辦高技[2016]741號)資助。
作者簡介:趙浩(1984-),男,新疆烏魯木齊人,高級工程師,畢業于北京大學軟件與微電子學院,碩士研究生,研究方向為機器學習、深度學習、數據挖掘、數據分析、自動化控制等。