圖像分類入門,輕鬆拿下90%準確率
原作 Margaret Maynard-Reid
王小新 編譯自 TensorFlow的Medium
量子位 出品 | 公眾號 QbitAI
這篇教程會介紹如何用TensorFlow里的tf.keras函數,對Fashion-MNIST數據集進行圖像分類。
只需幾行代碼,就可以定義和訓練模型,甚至不需要太多優化,在該數據集上的分類準確率能輕鬆超過90%。
在進入正題之前,我們先介紹一下上面提到的兩個名詞:
Fashion-MNIST,是去年8月底德國研究機構Zalando Research發布的一個數據集,其中訓練集包含60000個樣本,測試集包含10000個樣本,分為10類。樣本都來自日常穿著的衣褲鞋包,每一個都是28×28的灰度圖。
這個數據集致力於成為手寫數字數據集MNIST的替代品,可用作機器學習演算法的基準測試,也同樣適合新手入門。
或者去GitHub:
https://github.com/zalandoresearch/fashion-mnist
tf.keras是用來在TensorFlow中導入Keras的函數。Keras是個容易上手且深受歡迎的深度學習高級庫,是一個獨立開源項目。在TensorFlow中,可以使用tf.keras函數來編寫Keras程序,這樣就能充分利用動態圖機制eager execution和tf.data函數。
下面可能還會遇到其他深度學習名詞,我們就不提前介紹啦。進入正題,教你用tf.keras完成Fashion-MNIST數據集的圖像分類~
運行環境
無需設置,只要使用Colab直接打開這個Jupyter Notebook鏈接,就能找到所有代碼。
https://colab.research.google.com/github/margaretmz/deep-learning/blob/master/fashion_mnist_keras.ipynb
數據處理
Fashion-MNIST數據集中有十類樣本,標籤分別是:
T恤 0
褲子 1
套頭衫 2
裙子 3
外套 4
涼鞋 5
襯衫 6
運動鞋 7
包 8
踝靴 9
數據集導入
下面是數據集導入,為後面的訓練、驗證和測試做準備。
只需一行代碼,就能用keras.datasets介面來載入fashion_mnist數據,再用另一行代碼來載入訓練集和測試集。
數據可視化
我喜歡用Jupyter Notebook來可視化,你也可以用matplotlib庫中imshow函數來可視化訓練集中的圖像。要注意,每個圖片都是大小為28x28的灰度圖。
1# Show one of the images from the training dataset
2plt.imshow(x_train[img_index])
數據歸一化
接著,進行數據歸一化,使得樣本值都處於0到1之間。
數據集劃分
這個數據集一共包含60000個訓練樣本和10000個測試樣本,我們會把訓練樣本進一步劃分為訓練集和驗證集。下面是深度學習中三種數據的作用:
訓練數據,用來訓練模型;
驗證數據,用來調整超參數和評估模型;
測試數據,用來衡量最優模型的性能。
模型構建
下面是定義和訓練模型。
模型結構
在Keras中,有兩種模型定義方法,分別是序貫模型和功能函數。
在本教程中,我們使用序貫模型構建一個簡單CNN模型,用了兩個卷積層、兩個池化層和一個Dropout層。
要注意,第一層要定義輸入數據維度。最後一層為分類層,使用Softmax函數來分類這10種數據。
模型編譯
在訓練模型前,我們用model.compile函數來配置學習過程。在這裡,要選擇損失函數、優化器和訓練測試時的評估指標。
模型訓練
訓練模型時,Batch Size設為64,Epoch設為10。
測試性能
訓練得到的模型在測試集上的準確率超過了90%。
預測可視化
我們通過datasetmodel.predict(x_test)函數,用訓練好的模型對測試集進行預測並可視化預測結果。當標籤為紅色,則說明預測錯誤;當標籤為綠色,則說明預測正確。下圖為15個測試樣本的預測結果。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※無監督學習才不是「不要你管」
※中科院計算所研究員陳雲霽:深度學習處理器的現狀及發展
TAG:量子位 |