我正在尝试检查验证数据集上模型的性能。因此,我正在使用predict_generator
返回我的validation_generator
的预测。但是,我无法将预测与从validation_generator.classes
返回的真实标签进行匹配,因为我的预测顺序混合了。
这是初始化发电机的方式:
BATCH_SIZE = 64
data_generator = ImageDataGenerator(rescale=1./255,
validation_split=0.20)
train_generator = data_generator.flow_from_directory(main_path, target_size=(IMAGE_HEIGHT, IMAGE_SIZE), shuffle=False, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="training")
validation_generator = data_generator.flow_from_directory(main_path, target_size=(IMAGE_HEIGHT, IMAGE_SIZE), shuffle=False, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="validation")
#Found 4473 images belonging to 3 classes.
#Found 1116 images belonging to 3 classes.
现在我正在像这样使用predict_generator:
validation_steps_per_epoch = np.math.ceil(validation_generator.samples / validation_generator.batch_size)
predictions = model.predict_generator(validation_generator, steps=validation_steps_per_epoch)
我意识到我的验证数据大小(= 1116)和validation_steps_per_epoch(= 1152)之间不匹配。由于这两个不匹配,因此每次运行model.predict_generator(...)时,我发现输出predictions
是不同的。
除了将batch_size更改为1之外,还有什么方法可以解决此问题,以确保生成器逐步遍历所有样本?
我在keras predict_generator is shuffling its output when using a keras.utils.Sequence找到了类似问题的人,但是由于我没有编写任何自定义函数,因此他的解决方案无法解决我的问题。
答案 0 :(得分:0)
没有进行任何随机化或改组,这是因为验证生成器的批大小没有完全划分样本数量,因此剩余的样本会溢出到下次调用生成器时,这很混乱一切。
您可以做的是为验证生成器设置一个批处理大小,该批处理大小将验证样本的数量精确地划分,或者将批处理大小设置为一个。