手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

格伯納發表於2018-05-24

卷積神經網路(CNN)是當前用於影像分類任務的最先進的體系結構。無論是面部識別、自動駕駛汽車還是物體檢測,CNN都被廣泛使用。在這篇文章中,我們設計了一個簡單的二維卷積神經網路(CNN)模型,該模型使用具有張量流後端的keras,用於眾所周知的MNIST數字識別任務。整個工作流程可以是:

  • 準備資料

  • 建立和編譯模型

  • 訓練和評估模型

  • 將模型儲存到磁碟以供重用

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

準備資料

這裡使用的資料集是如上所述的MNIST資料集。 MNIST資料庫(修改後的國家標準與技術研究院資料庫)是手寫數字(0至9)的大型資料庫。該資料庫包含60,000個訓練影像和10,000個每個大小為28x28的測試影像。第一步是載入資料集,這可以透過keras api輕鬆完成。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

從這裡可以看出,在左上角儲存的影像'5'是X_train [0],y_train [0]包含標籤’5'。我們的深度學習模式應該只能夠手寫影像並預測寫入的實際數字。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

現在,為了準備資料,我們需要對影像進行一些處理,如調整影像大小,對畫素值進行歸一化等。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

在對影像資訊進行必要的處理之後,標籤資料即y_train和y_test需要被轉換為分類格式,如標籤'3'應該被轉換為向量[ 0,0,0]用於建模。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

建立和編譯模型

在資料準備好提供給模型後,我們需要定義模型的體系結構並使用必要的最佳化函式、損失函式和效能指標進行編譯。

這裡遵循的體系結構是2個卷積層,接著是合併層,分別是完全連線層和softmax層。在每個卷積層使用多個濾波器,用於不同型別的特徵提取。一個直觀的解釋是,如果第一個過濾器有助於檢測影像中的直線,第二個過濾器將有助於檢測圓圈等等。每層技術執行的解釋將成為即將釋出的文章的一部分。在maxpooling和完全連線層之後,在我們的模型中引入dropout作為正則化來減少過度擬合問題。

在maxpooling和完全連線層之後,在我們的模型中引入dropout作為正則化來減少過度擬合問題。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

在定義了模型的體系結構之後,需要編譯模型。在這裡,我們使用categorical_crossentropy損失函式,因為它是一個多類分類問題。由於所有標籤都具有相似的權重,因此我們更願意將其作為效能指標。使用稱為AdaDelta的流行梯度下降技術來最佳化模型引數。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

訓練和評估模型

在定義和編譯模型架構之後,需要使用訓練資料對模型進行訓練,以便能夠識別手寫數字。因此我們將用X_train和y_train來擬合模型。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

這裡,一個時代意味著所有訓練樣本的前向和後向傳遞。批次大小意味著一次前進/後退過程中訓練樣本的數量。訓練輸出是:

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

現在,訓練好的模型需要根據效能進行評估。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

測試準確性99%+意味著該模型對於預測訓練良好。如果我們將整個訓練日誌形象化,那麼隨著更多數量的時期,模型在訓練和測試資料上的損失和準確性趨於一致,從而使模型變得穩定。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

將模型儲存到磁碟以供重用

現在,訓練好的模型需要序列化。模型的體系結構或結構將儲存在json檔案中,權重將以hdf5檔案格式儲存。

手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!

因此,儲存的模型可以稍後重複使用或輕鬆移植到其他環境。在即將釋出的文章中,我們將看到如何在生產環境中部署這種訓練好的模型。

享受深度學習!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31509949/viewspace-2155026/,如需轉載,請註明出處,否則將追究法律責任。

相關文章