我有以下生成器:
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设置为无(或仅删除此参数)会产生相同的错误。
此代码在第一个时期运行良好,但是随后在第二个时期开始时,它说说它的数据用完了:
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.
此警告不仅是警告,还会完全停止执行。
似乎它只在生成器中运行一次,而我认为它将在每个时期重新启动生成器。
我真的不知道该怎么做。
我可以创建一个输入数组,将原始数据重复1000次,但这会占用大量内存,并且必须有一种方法告诉它在每次迭代中重新启动生成器,但是我不这样做。不知道如何。
我有以下生成器:def customGenerator(generator,indexs):对于索引中的i:x,y = generator [i] yield(np.squeeze(x),{'outputsA':y [:,4:6 ],'...
生成器在for循环的末尾停止。要简单地重复数据,请将for循环包装在while循环中: