如果steps_per_epoch不适合样本数量怎么办?

Flo*_*Man 3 generator keras

使用fit_generatorKeras,steps_per_epoch应相当于样本的可用总数除以batch_size.

但是fit_generator如果我选择一个batch_size不适合样品n次的发生器或反应怎么样呢?它是否会产生样品,直到它不能再填充整体batch_size,或者只是使用较小的样品batch_size进行最后的产量?

为什么我要问:我将我的数据划分为不同大小(不同%)的训练/验证/测试,但是对于训练和验证集使用相同的批量大小,但对于训练和测试集尤其如此.由于它们的尺寸不同,我不能保证批量大小适合样品的总量.

Dan*_*ler 6

如果它是你的发电机 yield

是您创建生成器,因此行为由您定义.

如果steps_per_epoch大于预期的批次,fit将看不到任何东西,它将只是继续请求批次,直到它达到步骤数.

唯一的事情是:你必须保证你的发电机是无限的.

有这样做while True:开头,例如.

如果它是一个发电机ImageDataGenerator.

如果生成器来自a ImageDataGenerator,它实际上是a keras.utils.Sequence并且它具有length属性:len(generatorInstance).

然后你可以检查自己发生了什么:

remainingSamples = total_samples % batch_size #confirm that this is gerater than 0
wholeBatches = total_samples // batch_size
totalBatches = wholeBatches + 1

if len(generator) == wholeBatches:
    print("missing the last batch")    
elif len(generator) == totalBatches:
    print("last batch included")
else:
    print('weird behavior')
Run Code Online (Sandbox Code Playgroud)

并检查最后一批的大小:

lastBatch = generator[len(generator)-1]

if lastBatch.shape[0] == remainingSamples:
    print('last batch contains the remaining samples')
else:
    print('last batch is different')
Run Code Online (Sandbox Code Playgroud)