一、數據生成器
1、model.fit_generator負責的任務就是訓練神經網路模型,但是要訓練,需要大量的數據集。一般來講,數據集的大小有限制,如果直接放入內存中進行訓練,會非常耗時。這時就需要使用數據生成器來進行數據的生成和提供。
2、數據生成器可以解決內存有限的問題,每次只產一組數據輸入模型中,來獲取輸出,並反饋Loss給模型,模型在此基礎上進行參數更新。相比較於直接將所有數據一次性讀入內存提高了運行效率。Keras提供了fit_generator函數,從而使訓練過程變得更加容易。
3、數據生成器的實現需要調用keras.preprocessing.image.ImageDataGenerator()方法,並且指定一些參數。其中要注意的參數主要是rescale, shear_range, zoom_range, horizontal_flip等,分別指的是對圖片進行縮放、剪裁、旋轉、翻轉等操作。
# 定義數據生成器
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255, # 圖像縮放
shear_range=0.2, # 剪裁
zoom_range=0.2, # 縮放
horizontal_flip=True) # 翻轉
val_datagen = ImageDataGenerator( rescale=1./255 )
# 提供數據, flow_from_directory讀取本地文件
batch_size = 64
train_generator = train_datagen.flow_from_directory(
train_data_dir, # 訓練數據路徑
target_size=(height, width),
batch_size=batch_size,
class_mode='binary') # 圖片分類,返回generator類
val_generator = val_datagen.flow_from_directory(
val_data_dir,
target_size=(height, width),
batch_size=batch_size,
class_mode='binary')
二、fit_generator參數詳解
1、fit_generator函數也是負責訓練模型,函數參數相對於fit函數會有所變化。如:steps_per_epoch、epochs、validation_data等。下面詳細解釋一下各個參數的含義。
2、 generator: 直接提供數據集的迭代器,這個generator只能包含圖片的數據(x),而且不包含數據標籤,比較少用。
3、 steps_per_epoch: 一個epoch包含的訓練次數,每次批量size等於batch_size。比如總共有1000張圖片,batch_size為10,那一個epoch需要訓練1000/10=100次。
4、 epochs: 整個數據集迭代多少遍,才算完成一次訓練。epochs越大,模型訓練時間越長。
5、 validation_data: 驗證集的數據,長度和batch_size有關,所以可以為空
history = model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples/train_generator.batch_size, # 一個epoch的訓練次數
epochs=epochs,
validation_data=val_generator,
validation_steps=val_generator.samples/val_generator.batch_size, # 一個epoch的驗證次數
verbose=1)
三、使用model.fit_generator的注意事項
1、使用fit_generator需要注意一些錯誤問題,這些錯誤可能會引起拋出異常(perhaps a result of too many generator iterations),而且這些錯誤在不同的環境下可能是不可重複的。
2、原因在於如果生成器返回的樣本數量不是generator.batch_size的倍數,Keras會拋出異常。所以在完成訓練之後,需要對訓練好的模型進行一些存儲操作,以便長時間保持模型不變。
3、同時,在對新數據進行預測的時候,需要注意圖像的縮放等操作,否則會出現不符合預期的結果。
四、總結
本文對model.fit_generator函數進行了詳細的解釋和分析,講述了使用過程中需要注意的問題和方法。對於使用Keras平台進行數據生成和訓練的工程師來說,這篇文章非常實用。
原創文章,作者:PIAL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137597.html