機器學習 | 貓狗大戰

  • 更多內容請關注『機器視覺CV』

前言

對於機器學習來說,數據的重要性無可厚非,大部分處理機器學習的問題都是在處理數據,包括數據的清洗,歸一化等,好的數據質量能大大提高模型的預測性能

但是對與初學者來說,數據變得不那麼重要,因為學習機器學習主要學習算法思想以及如何實現,要善於站在前人的肩膀上對於計算機視覺領域,前輩們已經創建許多非常強大的圖片數據集,如 Image-net: 『http://www.image-net.org/ 』 Google 圖片數據庫 『https://storage.googleapis.com/openimages/web/index.html 』可以幫助我們加速開發模型

下面要介紹的一個框架是 Keras 對於新手非常友好,本人之前使用過一階段的 Tensorflow 感覺比較抽象,對於想快速入門機器學習的同學, Keras 是一款不錯的選擇

以下是三個框架這幾年的流行程度,從中我們能看出一點趨勢

Keras 中有許多數據集,包括用來做二分類的 IMDB 數據集、多分類的路透社數據集、做迴歸的波士頓房價數據集等,而本文要介紹的是二分類的圖片數據集,貓狗數據集,原始數據可以在 Kaggle 官網上進行下載 『https://www.kaggle.com/c/dogs-vs-cats/data』 如果你沒有 Kaggle 帳號,我將在文後附上我已經下載的數據集供你們使用

數據格式如下: 其中訓練集 1000 張,驗證集 500 張,測試集 500 張,總共 4000 張。

貓狗大戰開始

機器學習的一般步驟是:

  • 準備數據
  • 數據預處理(檢查數據、數據歸一化、將數據轉換成張量等)
  • 建立模型
  • 查看精度和損失
  • 預測
  • 保存模型

查看數據

檢查數據是數據處理過程中一項基本步驟,可以預防數數據路徑、數據集數量、數據集格式等出現錯誤

數據預處理

  • 讀取圖像文件。
  • 將 JPEG 文件解碼為 RGB 像素網格。
  • 將這些像素網格轉換為浮點數張量。
  • 將像素值(0~255 範圍內)縮放到 [0, 1] 區間(正如你所知,神經網絡喜歡處理較小的輸入值)。
機器學習 | 貓狗大戰

建立卷積模型

計算機視覺大部分模型都是使用卷積神經網絡(CNN)

編譯模型

利用批量生成器擬合模型

這段程序運行的時間會有的久,若同學們不想運行,我已經將訓練好的模型保存起來,供你們使用

保存模型

模型預測

機器學習 | 貓狗大戰

對訓練集進行預測

對測試及進行預測

結果可視化

處理保存的模型和訓練歷史

本模塊是將訓練好的精度和損失保存下來,方便下一次進行分析

機器學習 | 貓狗大戰

結果分析

訓練精度隨時間線性增加,而驗證精度停留在 70% 左右,驗證損失僅在 10 輪後就達到最小值,然後保持不變,而訓練損失則一直線性下降,直到接近於 0。

過擬合的原因主要是因為訓練樣本相對較少(貓狗各 2000 個)

結語

我在學習的過程中,發現使用 Keras 自帶的樣本迭代器來訓練時速度很慢,主要原因是:每次訓練的時候,時間大部分消耗在 CPU 讀取數據上,而真正訓練的時間並不是很長,之後會介紹幾種方法,不僅能提升訓練精度,也能讓訓練的時間可能的短,即使你沒有 GPU 來加速

別忘了愛自己

別忘了熱愛生活,代碼敲累了,就出去走走,生活總是美好的~


分享到:


相關文章: