gpt4 book ai didi

python - 如何: fit_generator in keras

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:56 27 4
gpt4 key购买 nike

我有点困惑如何在 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 时是如何处理的。如果我有以下生成器:

def data_generator():
for x, y in load_data_per_line():
yield x, y

在上面的生成器中,每次产生一个数据点。并且:

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 = []

在上面的生成器中,每次 yield 批量数据点(在本例中为 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)?如果其中任何一个是正确的,是否保证所有数据点都将被处理并且也被顺序处理?

任何见解都是有用的

最佳答案

生成器 2 几乎没问题,但它应该更好地返回 numpy 数组:

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

此外,它应该是无限的:

while True: 

#the code inside to loop infinitely

第一个不会返回批处理并且会失败。

您可能会在 steps_per_epoch 中遇到问题,因为 10000 不是 512 的倍数。您需要整数步长。您可以在生成器内部检查 if i == 10000: 并将较小的批处理作为最后一批传递。

然后你有 (10000//512) + (10000 % 512) 步骤或批处理。

所有批处理都会被顺序读取,但是keras会自动打乱这些批处理的内容,使用suffle=False。如果您使用多线程(不是这种情况),那么您需要创建线程安全生成器或使用 keras Sequence

关于python - 如何: fit_generator in keras,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com