2019年3月28日 星期四

Keras-使用ImageDataGenerator注意事項

Keras 使用ImageDataGenerator注意事項

在實作影像辨識的時候,一般小數據集上我們常見作法就是直接將照片轉numpy.ndarray直接載入記憶體來做後續的操作,但這種作法卻無法直接應用於大數據集上,因此Keras提供了一個非常方便的工具ImageDataGenerator

ImageDataGenerator提供了資料增強以及過程中縮放尺寸以及設置batch_size…等便利性功能,但是愈是便利性的功能就愈有一些問題。

我試著記錄個人遇過的問題,希望跟你遇到的問題相通。

常見問題集

  1. 驗證資料集的ImageDataGenerator是否需要執行資料增強?
    • 不需要,我們要做的是利用驗證資料集在訓練過程中同步驗證模型的泛化性,因此不做任何資料增強。(rescale=1./255除外)
  2. 為何每次的model.predict_generator得到的結果都不一樣?(或者與直接model.predict不一樣)
    • 在做model.predict_generator的時候記得設置shuffle=False,因為執行model.predict_generator之後我們會跟原始的label做比較,如果打散資料集會造成你所得到的結果資料索引與原始資料集不同。
    • 在每次執行任何的generator(i.e. evaluate_generator, predict_generator)之前都請執行一次generator.reset()(依你所定義的物件名稱調整generator)
      • 這麼做的理由在於,我們必須確保目前所指向的generator.batch_index是歸1的,否則依然會造成所得結果數據異常。

參考

generator.reset(): 連結
keras issue: 連結