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