Keras學習︱訓練時視訊記憶體out of memory的解決辦法——fit_generator函式
keras預設情況下用fit方法載資料,就是全部載入。換用fit_generator方法就會以自己手寫的方法用yield逐塊裝入
問題描述:建立好model之後,用model.fit()函式進行訓練,發現超出視訊記憶體容量
問題分析:fit()函式訓練時,將全部訓練集載入視訊記憶體之後,才開始分批訓練。顯然很容易就超出了視訊記憶體容量
解決辦法:用fit_generator函式進行訓練
fit_generator函式將訓練集分批載入視訊記憶體,但需要自定義其第一個引數——generator函式,從而分批將訓練集送入視訊記憶體
defdata_generator(data, targets, batch_size) :
batches = (len(data) + batch_size - 1)//batch_size
while(True):
for i in range(batches):
X = data[i*batch_size : (i+1)*batch_size]
Y = targets[i*batch_size : (i+1)*batch_size]
yield (X, Y)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
呼叫fit_generator時的方法
model.fit_generator(generator = data_generator(X_train , Y_train, batch_size),
steps_per_epoch = (len(data) + batch_size - 1) // batch_size,
epochs = num_epochs,
verbose = 1,
callbacks = callbacks,
validation_data = (X_val, Y_val)
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7