圖像分類入門,輕鬆拿下90%準確率|教你用Keras搞Fashion-MNIST

2021-01-10 量子位

原作 Margaret Maynard-Reid

王小新 編譯自 TensorFlow的Medium

量子位 出品 | 公眾號 QbitAI

這篇教程會介紹如何用TensorFlow裡的tf.keras函數,對Fashion-MNIST數據集進行圖像分類。

只需幾行代碼,就可以定義和訓練模型,甚至不需要太多優化,在該數據集上的分類準確率能輕鬆超過90%。

在進入正題之前,我們先介紹一下上面提到的兩個名詞:

Fashion-MNIST,是去年8月底德國研究機構Zalando Research發布的一個數據集,其中訓練集包含60000個樣本,測試集包含10000個樣本,分為10類。樣本都來自日常穿著的衣褲鞋包,每一個都是28×28的灰度圖。

這個數據集致力於成為手寫數字數據集MNIST的替代品,可用作機器學習算法的基準測試,也同樣適合新手入門。

想深入了解這個數據集,推薦閱讀量子位之前的報導:

連LeCun都推薦的Fashion-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的灰度圖。

數據歸一化

接著,進行數據歸一化,使得樣本值都處於0到1之間。

數據集劃分

這個數據集一共包含60000個訓練樣本和10000個測試樣本,我們會把訓練樣本進一步劃分為訓練集和驗證集。下面是深度學習中三種數據的作用:

訓練數據,用來訓練模型;驗證數據,用來調整超參數和評估模型;測試數據,用來衡量最優模型的性能。模型構建

下面是定義和訓練模型。

模型結構

在Keras中,有兩種模型定義方法,分別是序貫模型和功能函數。

在本教程中,我們使用序貫模型構建一個簡單CNN模型,用了兩個卷積層、兩個池化層和一個Dropout層。

要注意,第一層要定義輸入數據維度。最後一層為分類層,使用Softmax函數來分類這10種數據。

模型編譯

在訓練模型前,我們用model.compile函數來配置學習過程。在這裡,要選擇損失函數、優化器和訓練測試時的評估指標。

模型訓練

訓練模型時,Batch Size設為64,Epoch設為10。

測試性能

訓練得到的模型在測試集上的準確率超過了90%。

預測可視化

我們通過datasetmodel.predict(x_test)函數,用訓練好的模型對測試集進行預測並可視化預測結果。當標籤為紅色,則說明預測錯誤;當標籤為綠色,則說明預測正確。下圖為15個測試樣本的預測結果。

相關連結

最後,在這篇普通的入門教程基礎上,還有一些提升之路:

如果想深入了解本文使用的Google Colab,可以看這份官方介紹:

https://medium.com/tensorflow/colab-an-easy-way-to-learn-and-use-tensorflow-d74d1686e309

如果你是深度學習初學者,MNIST也應該了解一下。之前TensorFlow有一篇MNIST教程,可以拿來和本文比較一下,你就會發現,深度學習現在已經變得簡單了很多:

https://www.tensorflow.org/versions/r1.1/get_started/mnist/beginners

本文用到的是Keras裡的序貫模型,如果對功能函數感興趣,可查看這篇用Keras功能函數和TensorFlow來預測葡萄酒價格的博文:

https://medium.com/tensorflow/predicting-the-price-of-wine-with-the-keras-functional-api-and-tensorflow-a95d1c2c1b03

— 完—

相關焦點

  • 從小白到入門:用Keras進行圖像基礎分類
    【IT168 資訊】在這篇文章中,將解釋一些在keras中經常需要的常見操作。首先,如何保存模型並使用它們進行預測,從數據集中顯示圖像並從加載系統中圖像並預測其類別。
  • 評測| CNTK在Keras上表現如何?能實現比TensorFlow更好的深度學習嗎?
    在深度學習成為主流之前,優秀的機器學習模型在測試集上達到大約 88% 的分類準確率。第一個模型方法(imdb_bidirectional_lstm.py)使用了雙向 LSTM(Bidirectional LSTM),它通過詞序列對模型進行加權,同時採用向前(forward)傳播和向後(backward)傳播的方法。
  • 5分鐘入門GANS:原理解釋和keras代碼實現
    它是一種可替代的自適應變分編碼器(VAEs)學習圖像的潛在空間,以生成合成圖像。它的目的是創造逼真的人工圖像,幾乎無法與真實的圖像區分。GAN的直觀解釋生成器和鑑別器網絡:生成器網絡的目的是將隨機圖像初始化並解碼成一個合成圖像。
  • Keras官方出調參工具了,然而Francois說先別急著用
    然而目前發布的版本還不成熟,Keras 作者 Franois Chollet 表示:大家先別用,API 還不穩定。Keras Tuner GitHub 地址:https://github.com/keras-team/keras-tuner早在上個月舉辦的谷歌 I/O 大會上,谷歌即展示了 Keras Tuner 的功能。
  • Keras R語言接口正式發布,同時公開20個完整示例
    這意味著Keras 本質上適合用於構建任意深度學習模型(從記憶網絡到神經圖靈機)兼容多種運行後端,例如TensorFlow、CNTK和 Theano如果你已經很熟悉Keras了,並且想要立刻體驗最新發布的R語言接口,請點擊如下網址:https://keras.rstudio.com,這裡有超過20個完整示例,相信有你需要的東西。
  • TensorFlow(Keras)中的正則化技術及其實現(附代碼)
    import tensorflow as tffrom tensorflow import keras我們將使用的數據集是瑣碎的fashion-MNIST數據集。fashion-MNIST數據集包含70,000件服裝圖像。更具體地說,它包括60,000個訓練示例和10,000個測試示例,它們都是尺寸為28 x 28的灰度圖像,分為十類。數據集的準備工作包括通過將每個像素值除以255.0來歸一化訓練圖像和測試圖像。這會將像素值置於0到1的範圍內。
  • 手把手教你用Keras進行多標籤分類(附代碼)
    我們將基於keras,應用classify.py對每一個樣例圖片執行多標籤分類。 如果這些(文件)看起來太多了,別擔心!我們將會按照我所提出的順序逐個回顧。我們用於多標籤分類的Keras神經網絡架構訓練和驗證的準確率+損失在第127-137行代碼中繪畫。該圖片在第138行中被保存為一個圖片文件。 在我看來,訓練圖像的繪製就跟模型本身一樣重要。
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    你必須已閱讀很多有關不同深度學習框架(包括TensorFlow,PyTorch,Keras等)之間差異的信息。TensorFlow和PyTorch無疑是業內最受歡迎的框架。我相信你會發現無窮的資源來學習這些深度學習框架之間的異同。在本文中,我們將了解如何在PyTorch和TensorFlow中建立基本的圖像分類模型。
  • 不能搞題海戰術,三大選題技巧教你輕鬆跳出題海之坑
    三個選題技巧,教你輕鬆選好數學習題,不搞題海戰術hello,這裡是尖子生數理化教育。很高興在這裡和大家交流學習方法。最近有家長來信,問我們,是不是搞好題海戰術,孩子就能學好數學了?到底該做多少題目才能快速提高自己的數學成績?
  • 小白學CNN以及Keras的速成
    一、為何要用Keras如今在深度學習大火的時候,第三方工具也層出不窮,比較出名的有Tensorflow,Caffe,Theano,MXNet,在如此多的第三方框架中頻繁的更換無疑是很低效的,只要你能夠好好掌握其中一個框架,熟悉其原理,那麼之後因為各種要求你想要更換框架也是很容易的。那麼sherlock用的是哪個框架呢?
  • 用Keras和「直方圖均衡」為深度學習實現「圖像擴充」
    使用ImageDataGenerator函數創建一個圖像生成器用Keras進行圖像數據的擴充是非常簡單的,在這裡,我們應該感謝Jason Brownlee,因為是他給我們提供了一個非常全面、到位的Keras圖像擴充教程。
  • 手把手教你用PyTorch實現圖像分類器(第一部分)
    最後一個項目是用PyTorch創建一個102種不同類型的花的圖像分類器。在做這個final project的時候,很多同學都遇到了類似的問題和挑戰。當我接近完成的時候,我決定與大家分享一些在未來對他人有益的建議和見解。通過3篇短文,介紹如何實現圖像分類器的概念基礎——這是一種能夠理解圖像內容的算法。
  • 掌握深度學習,數據不足也能進行圖像分類!
    ——吳恩達圖像分類即根據固定類別對輸入的圖像設置標籤。儘管計算機視覺過於簡單,但是它在實際中仍有廣泛的應用,而圖像分類就是其中的核心問題之一。在本文中,小芯將示範如何在數據不足的情況下應用深度學習。現已創建特製汽車和巴士分類器兩個數據集,每個數據集包含100個圖像。其中,訓練集有70個圖像,驗證集有30個。挑戰1.
  • TensorFlow 2入門指南,初學者必備!
    請注意,我們在輸出層中使用了Softmax(激活函數),因為它是一個多類分類問題。 如果這是一個二進位分類問題,我們會使用Sigmoid激活函數。我們可以傳入任何我們想要的激活函數,如Sigmoid或linear或tanh,但實驗證明relu在這類模型中表現最好。現在,當我們定義了模型的形狀後,下一步是指定它的損耗、優化器和度量。 我們在k
  • 手把手教你用 Keras 實現 LSTM 預測英語單詞發音
    原標題:手把手教你用 Keras 實現 LSTM 預測英語單詞發音 雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 Predicting English Pronunciations,作者 Ryan Epp。