使用fit_generatorKeras,steps_per_epoch应相当于样本的可用总数除以batch_size.
但是fit_generator如果我选择一个batch_size不适合样品n次的发生器或反应怎么样呢?它是否会产生样品,直到它不能再填充整体batch_size,或者只是使用较小的样品batch_size进行最后的产量?
为什么我要问:我将我的数据划分为不同大小(不同%)的训练/验证/测试,但是对于训练和验证集使用相同的批量大小,但对于训练和测试集尤其如此.由于它们的尺寸不同,我不能保证批量大小适合样品的总量.
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)
| 归档时间: |
|
| 查看次数: |
1627 次 |
| 最近记录: |