我最初尝试使用 generator
编写自定义生成器以训练 Keras 模型时的语法。所以我yield
编辑来自 __next__
.但是,当我尝试使用 model.fit_generator
训练我的模式时我会得到一个错误,我的生成器不是迭代器。修复是更改 yield
至 return
这也需要重新调整 __next__
的逻辑跟踪状态。相比出租yield
比较麻烦为我做这项工作。
有什么方法可以让我用 yield
完成这项工作?如果我必须使用 return
,我将需要编写更多的迭代器,这些迭代器必须具有非常笨拙的逻辑。陈述。
最佳答案
我无法帮助调试您的代码,因为您没有发布它,但我缩写了我为语义分割项目编写的自定义数据生成器,供您用作模板:
def generate_data(directory, batch_size):
"""Replaces Keras' native ImageDataGenerator."""
i = 0
file_list = os.listdir(directory)
while True:
image_batch = []
for b in range(batch_size):
if i == len(file_list):
i = 0
random.shuffle(file_list)
sample = file_list[i]
i += 1
image = cv2.resize(cv2.imread(sample[0]), INPUT_SHAPE)
image_batch.append((image.astype(float) - 128) / 128)
yield np.array(image_batch)
用法:
model.fit_generator(
generate_data('~/my_data', batch_size),
steps_per_epoch=len(os.listdir('~/my_data')) // batch_size)
关于python-3.x - 使用 Keras 的生成器 model.fit_generator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493419/