tf.keras 用生成器讀取圖片數據+預處理


0. 需求

  • 當訓練的數據非常多時,是不希望分配過多的內存將數據存入,否則其他占用內存的數據處理步驟就沒法進行了。我們最好是以小批量地方式讀入數據,然后預處理,然后送到網絡,之后釋放內存,以此循環。

 

1. 方法的簡要說明

  • tf.keras中有一個高度封裝的圖片預處理類:ImageDataGenerator
  • ImageDataGenerator類還實現了一個非常方便的自動讀取訓練集文件夾的方法:flow_from_directory()
  • 我們實例化一個ImageDataGenerator類后,設置預處理的參數;然后對實例調用flow_from_directory()方法。對該方法傳遞一個路徑參數,路徑為數據集所在目錄。其中訓練集和測試集要分成兩個文件夾,並且每一個label對應的圖片存放在以label命名的文件夾中。
  • 調用flow_from_directory()方法之后,會返回一個生成器。
  • 生成器可以用next()函數來在每次迭代中提取(X,y),或者也可以直接傳遞給實例化的模型類的fit()方法

(使用前建議shift+tab查看函數|類的說明文檔)

 

2. 案例: 斯坦福120個狗品種分類

(忽略訓練結果,只是示例數據讀取和預處理)

<代碼及運行結果>

https://nbviewer.jupyter.org/github/JoJoJohnSnow/JPnotes/blob/master/notes/%E7%94%A8%E7%94%9F%E6%88%90%E5%99%A8%E8%AF%BB%E5%8F%96%E5%9B%BE%E7%89%87%E6%95%B0%E6%8D%AE%E5%92%8C%E9%A2%84%E5%A4%84%E7%90%86.ipynb

(不要介意圖片中的狗看起來像個地精)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM