Keras:生成第二个纪元时生成器用尽了数据

问题描述 投票:0回答:1

我有以下生成器:

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 ],'...

python tensorflow keras generator
1个回答
2
投票

生成器在for循环的末尾停止。要简单地重复数据,请将for循环包装在while循环中:

© www.soinside.com 2019 - 2024. All rights reserved.