簡體   English   中英

如何:keras 中的 fit_generator

[英]How to: fit_generator in keras

我有點困惑如何在keras使用fit_generator

舉例來說:

  • 我們有 10000 個數據點
  • 我們想跑 10 個 epoch
  • 批量大小為 512

使用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_generatordata_generator s)? 如果其中任何一個是正確的,是否能保證所有數據點都將被處理並按順序處理?

任何見解都是有用的

生成器 2 幾乎沒問題,但它應該更好地返回 numpy 數組:

yield np.asarray(x_output),np.asarray(y_output)

此外,它應該是無限的:

while True: 

    #the code inside to loop infinitely

第一個不會返回批次並且會失敗。

您可能會在steps_per_epochsteps_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM