【发布时间】:2020-09-17 02:35:12
【问题描述】:
我有以下生成器:
def customGenerator(generator, indexes):
for i in indexes:
x,y = generator[i]
yield (np.squeeze(x),
{'outputsA': y[:,4:6], 'outputsB': y[:,11:],
'outputsC': y[:,10]} )
然后是训练模型的行(我省略了一些与问题无关的行):
randomize = np.arange( len(generator) )
np.random.shuffle(randomize)
trainLimit = int( 0.9*len(generator) )
model.fit(x = customGenerator(generator, randomize[:trainLimit]), y = None,
validation_data = customGenerator(generator, randomize[trainLimit:]),
epochs=1000, steps_per_epoch = trainLimit)
将 steps_per_epoch 设置为 None(或仅删除此参数)会产生相同的错误。
这段代码在第一个 epoch 运行良好,但在开始第二个 epoch 时它说它用完了数据:
Epoch 1/1000
2534/2534 [==============================] - 1124s 443ms/step - loss: 20.3274 - outputsA_loss: 8.2611 - outputsB_loss: 11.8572 - outputsC_loss: 0.2091 - val_loss: 11.4947 - val_outputsA_loss
: 3.3958 - val_outputsB_loss: 7.9044 - val_outputsC_loss: 0.1945
Epoch 2/1000
WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 2534000
batches). You may need to use the repeat() function when building your dataset.
这个警告不仅仅是一个警告,它会完全停止执行。
它似乎只运行一次生成器,而我认为它会在每个 epoch 重新启动生成器。
我真的不知道该怎么做。
我可以创建一个输入数组,它是重复 1000 次的原始数据,但这会占用大量内存,并且必须有一种方法告诉它在每次迭代中重新启动生成器,但我没有不知道怎么做。
【问题讨论】:
标签: python tensorflow keras generator