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個狗品種分類
(忽略訓練結果,只是示例數據讀取和預處理)
<代碼及運行結果>
(不要介意圖片中的狗看起來像個地精)