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?