keras 中 model.predict() 和 model.predict_generator() 之间的预测差异

Posted

技术标签:

【中文标题】keras 中 model.predict() 和 model.predict_generator() 之间的预测差异【英文标题】:difference in predictions between model.predict() and model.predict_generator() in keras 【发布时间】:2017-12-20 07:11:16 【问题描述】:

当我在 test_set (images) 上使用 model.predict_generator() 时,我得到不同的预测,当我在同一个 test_Set 上使用 mode.predict() 时,我得到一组不同的预测。

为了使用model.predict_generator,我按照以下步骤创建了一个生成器:

    Imagedatagenerator(这里没有参数)并使用了 flow_from_directory 与shuffle = False. 没有增强或预处理 images(normalization,zero-centering etc) 训练模型时。

我正在研究一个涉及狗和猫的二元分类问题(来自 kaggle)。在测试集上,我有 1000 张猫图像。 通过使用model.predict_generator(),我可以获得 87% accuracy()i.e 870 图像被正确分类。 但是在使用 model.predict 时,我得到了 83% 的准确率。

这很令人困惑,因为两者都应该给出相同的结果,对吧? 在此先感谢:)

【问题讨论】:

你使用的是相同的模型吗?你也可以分享你的代码吗? 你确定 predict_generator() 只产生一个纪元吗?由于 Keras 2 生成器是基于步骤的(请参阅 fchollet 在此处github.com/fchollet/keras/issues/5818 的评论),因此您的预测中可能有不同数量的样本。您还可以重置生成器以确保始终从示例 #0 开始。 @petezurich 我不太明白你的意思你能提供一个示例代码吗? @AbhijitBalaji 我认为如果您提供代码会更容易。 :0) 现在我们只能猜测出什么问题了。除此之外:您可以在开始预测之前使用your_image_generator.reset() 重置生成器。 【参考方案1】:

@petezurich 感谢您的评论。在 model.predict_generator() 之前的 Generator.reset() 并在 predict_generator() 中关闭随机播放修复了问题

【讨论】:

太棒了。我很高兴你能解决你的问题。 @petezurich 嘿,现在生成器似乎存在不同的问题。假设您有 7427 个测试图像,并且在 model.predict_generator 中使用 16 的批量大小。输出只是一个长度为 7424 而不是 7427 的向量。因此,要使其工作,batch_size 必须精确地除以样本数。因此对于 len 7427 的输入数组,您应该使用 7 的批量大小从 predict.generator() 获得 7427 长度的数组输出

以上是关于keras 中 model.predict() 和 model.predict_generator() 之间的预测差异的主要内容,如果未能解决你的问题,请参考以下文章

model.predict(keras)输出中的类的顺序是啥?

如何在 Keras 中解释 model.predict() 的输出

Keras:model.evaluate vs model.predict 多类 NLP 任务中的准确率差异

如何将文件或图像作为 Keras 模型中的参数提供给 model.predict?

model.predict 不适用于 Keras 自定义层(推理错误)

tf.keras model.predict 导致内存泄漏