閆琳英YAN Lin-ying
(西安工商學院,西安 710200)
近幾年,人工智能及深度學習技術的應用領域越來越廣泛,這使得圖像分類識別已成為計算機視覺領域的研究熱點,也是解決海量圖像分類的關鍵[1]。卷積神經網絡作為圖像識別的關鍵技術,能有效解決圖像的分類問題,但其構建模型復雜,模型訓練時間較長,也容易出現過擬合等問題[2]。借助TensorFlow 平臺的Keras 接口[3]能夠簡化模型的構建,減少模型的訓練時間。因此,本文基于Keras 框架開發一種圖像識別模型,通過改進傳統模型中的損失函數,并引入DropOut 技術,對Fashion-MNIST 數據集進行識別,具有一定的實用價值。
Keras 是一個基于theano/tensorflow 的深度學習框架,是tensorflow2 引入的高封裝度的框架,可以用于快速搭建神經網絡模型,是作為一個高階API,支持快速原型設計,可快速搭建神經網絡模型[4]。采用Python 語言編寫,支持GPU 和CPU。采用Keras 框架進行深度學習模型的搭建,能夠有效減少模型的代碼量,提高模型的復用性,進而提高實驗效率。
TensorFlow 是由谷歌研發的一款用于高性能計算的開源軟件庫[5]。其基于數據流圖的形式表述計算。被廣泛應用于圖像處理、自然語言理解等領域。與TensorFlow1.x 版本不同,TensorFlow2.0 采用Eager 模式搭建原型,不需要建立Session 就可直接運行模型[6]。在搭建模型上TensorFlow2.0 更加方便快捷。TensorFlow2.0 更推薦使用tf.Keras、tf.data 等高級接口,簡化模型的搭建和訓練。
Keras 接口較于其他平臺,構建模型更模塊化,代碼更易理解。采用Keras 序列模型進行建模與訓練過程一般分為以下五步:
①創建一個Sequential 模型,并在Sequential()方法中添加從輸入層到輸出層的網絡模型結構;
②通過“compile()”定義訓練模式,選擇模型訓練時使用的優化器、損失函數和模型評估指標;
③訓練模型,通過“fit()”方法對模型進行迭代訓練;設置訓練集和測試集的輸入及標簽、批次大小和迭代次數等;
④評估模型,通過“evaluate()”對模型進行評估,一般通過模型的損失和準確率評估模型的效果;
⑤應用模型,通過“predict()”對模型進行結果預測。
本文提出的圖像分類模型在傳統卷積神經網路的基礎上,通過優化模型中的損失來提高模型的準確率,并增加Dropout 技術降低模型發生過擬合的概率。本模型總共有七層,分別為輸入層、三次卷積、三次池化和兩層全連接,最后輸出圖像的類別。
2.2.1 模型結構(圖1)
圖1 基于Keras 的圖像分類模型
輸入層:輸入圖像大小為28*28 的圖片。
卷積層:卷積核大小為3*3,采用Relu 激活函數;經過一次卷積后調用tf.keras.layers.Dropout()方法防止模型過擬合。
降采樣層:池化方式一般有兩種,最大池化和評平均池化,本模型中選擇最大池化方式,可減少網絡的參數和計算的數據量,有效防止過擬合。
通過四次卷積和三次池化之后,接著兩次全連接層,調用softmax 激活函數對結果進行分類,最終得到樣本所屬類別的概率。
2.2.2 損失函數
在分類模型中,一般會采用交叉熵損失函數。本文提出的模型最終是要進行圖像的多分類,因此采用多分類交叉熵損失函數。針對采用整數類型的標簽類別數據,Keras提供的tf.keras.losses.sparse_categorical_crossentropy()方法更為簡便,無需對標簽數據先進行one_hot 編碼就能直接使用。因此本文采用此方法作為模型的損失函數,該函數公式如下:
其中,m 為樣本數,k 為標簽類別數,對于多分類問題,通常與softmax 激活函數一起使用。
該函數定義為:
tf.keras.losses.sparse_categorical_crossentropy (y_true,y_pred, from_logits=False, axis=-1),其中y_true:實際標簽值;y_pred:預測值;from_logits:默認為False,表示輸出層經過了概率處理(softmax),當接收到了原始的logits,則為True;axis:計算交叉熵的維度,默認是-1。
2.2.3 DropOut 技術
在深度學習模型中,若參數過多,訓練樣本太少,模型很容易出現過擬合的現象[7]。過擬合問題是模型在訓練集的表現結果好,但是在測試數據集的擬合效果卻不理想。為了解決模型的過擬合問題,在模型訓練過程中,隨機丟棄部分神經元來避免過擬合,這種技術叫做Dropout 技術[8]。具體來說,神經網絡的訓練過程中,對于每一輪訓練中的神經網絡單元,Dropout 技術根據概率值(p)將其隨機丟掉,在模型訓練過程中該神經元就失去作用。在模型訓練時,Dropout 會遍歷神經網絡中所有層的所有節點,以概率p 來決定保留還是丟棄神經元節點。遍歷完成后,刪除丟棄的神經元對應的連線,從而達到減少節點數、降低網絡復雜度的目的。這樣就可以有效緩解過擬合的發生,在一定程度上達到正則化的效果。
經Dropout 之后的神經網絡模型如圖2 所示。
圖2 Dropout 技術
Fashion-MNIST 與MNIST 手寫字數據集不同,它是一個圖像數據集,涵蓋了來自10 種類別的共7 萬個不同商品的正面圖片,是由Zalando 旗下的研究部門提供[9]。Fashion-MNIST 數據集的圖片大小為28*28 的灰度圖片,訓練數據集共60000 個樣本,測試數據集共10000個樣本。
Fashion-MNIST 數據集有十個分類,分別是:t-shirt(T恤),trouser(牛仔褲),pullover(套衫),dress(裙子),coat(外套),sandal(涼鞋),shirt(襯衫),sneaker(運動鞋),bag(包),ankle boot(短靴)。(圖3)
圖3 Fashion-MNIST 數據集樣本
在本次實驗中,使用keras 建立的模型,經過20 次迭代訓練,批次大小為100,最終通過可視化可看到模型在整個訓練過程中損失一直減小,準確率達到了97.8%左右。模型的損失Loss 和準確率Accuracy 如圖4所示。
本文通過調用TensorFlow 框架的高級接口Keras 進行圖像識別模型的構建,以Fashion-MNIST 作為本次模型的數據集,通過調用tf.keras 提供的多分類交叉熵損失函數及Dropout 技術,研究了基于Keras 的卷積神經網絡實現圖像識別分類。通過模型的多次迭代及參數調整,最終實驗結果驗證了本文所構建的圖像分類模型具有較高的準確率。