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

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

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

  1. Imagedatagenerator(这里没有参数)并使用了 flow_from_directory 与shuffle = False.
  2. 没有增强或预处理 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() 重置生成器。

标签: python keras prediction


【解决方案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 长度的数组输出
猜你喜欢
  • 2020-09-19
  • 1970-01-01
  • 2019-09-07
  • 2021-12-13
  • 2023-04-11
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多