[英]How to: fit_generator in keras
我有點困惑如何在keras
使用fit_generator
。
舉例來說:
使用fit
我們只需:
x, y = load_data()
model.fit(x=x, y=y, batch_size=512, epochs=10)
其中load_data
加載所有數據。
現在如何對fit_generator
做同樣的fit_generator
。
我不清楚在使用fit_generator
時它是如何處理的。 如果我有以下生成器:
def data_generator():
for x, y in load_data_per_line():
yield x, y
在上面的生成器中,每次yields
一個數據點。 和:
def data_generator_2():
x_output = []
y_output = []
i = 0
for x, y in load_data_per_line():
x_output[i] = x
y_output[i] = y
i = i + 1
if i == batch_size:
yield x_output, y_output
i = 0
x_output = []
y_output = []
在上面的生成器中,每次yields
批量大小的數據點(在這種情況下為 512)。
要實現與fit
相同但使用fit_generator
:
model.fit_generator(data_generator(), steps_per_epoch=10000 / 512, epochs=10)
或者
model.fit_generator(data_generator_2(), steps_per_epoch=10000 / 512, epochs=10)
或者兩者都錯了( fit_generator
和data_generator
s)? 如果其中任何一個是正確的,是否能保證所有數據點都將被處理並按順序處理?
任何見解都是有用的
生成器 2 幾乎沒問題,但它應該更好地返回 numpy 數組:
yield np.asarray(x_output),np.asarray(y_output)
此外,它應該是無限的:
while True:
#the code inside to loop infinitely
第一個不會返回批次並且會失敗。
您可能會在steps_per_epoch
中steps_per_epoch
問題,因為 10000 不是 512 的倍數。您需要整數步。 您可以在生成器內部檢查if i == 10000:
並將較小的批次作為最后一批傳遞。
然后你有(10000 //512) + (10000 % 512)
步驟或批次。
所有批次都會按順序讀取,但 keras 會自動suffle=False
這些批次的內容,使用suffle=False
。 如果您使用多線程(不是這種情況),那么您需要創建線程安全生成器或使用 keras Sequence
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.