【发布时间】:2019-03-30 01:19:01
【问题描述】:
我正在尝试检查我的模型在验证数据集上的性能。因此,我使用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 找到了一个有类似问题的人,但是他的解决方案不能解决我的问题,因为我没有编写任何自定义函数。
【问题讨论】:
-
@AsronDT 你找到解决问题的方法了吗?
标签: python tensorflow keras