首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras model.evaluate()和model.predict()之间有什么区别?

Keras model.evaluate()和model.predict()之间有什么区别?
EN

Stack Overflow用户
提问于 2017-06-10 18:28:24
回答 4查看 52.9K关注 0票数 53

我用Keras生物医学图像分割来分割脑细胞。我用了model.evaluate(),它给了我骰子系数: 0.916。然而,当我使用model.predict(),然后循环通过计算骰子系数预测图像,骰子系数是0.82。为什么这两个价值观是不同的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-11 20:41:04

问题在于,Keras中的每个度量都是以下列方式计算的:

  1. 对于每个batch,计算一个度量值。
  2. 损失的当前值(在k批处理之后,等于计算出的k批的度量平均值)。
  3. 最后的结果是所有批次计算的所有损失的平均值。

大多数最流行的度量标准(如msecategorical_crossentropymae等)--作为每个示例的损失值的平均值--都具有这样的评估最终得到适当结果的属性。但是,在Dice系数的情况下--在所有批次中其值的平均值并不等于在整个数据集中计算的实际值,而且由于model.evaluate()使用这种计算方法--这是造成问题的直接原因。

票数 21
EN

Stack Overflow用户

发布于 2019-03-07 17:47:59

model.evaluate函数预测给定输入的输出,然后计算model.compile中指定的基于y_truey_pred的度量函数,并将计算出来的度量值作为输出返回。

model.predict只返回y_pred

因此,如果您使用model.predict,然后自己计算度量,则计算出来的度量值应该与model.evaluate相同。

例如,在评估基于RNN/ LSTM的模型时,可以使用model.predict而不是model.evaluate,在该模型中,需要在下一时间步骤将输出作为输入输入。

票数 61
EN

Stack Overflow用户

发布于 2017-06-10 19:57:55

keras.evaluate()函数将给出每个批的损失值。keras.predict()函数将为批处理中的所有样本和所有批次提供实际预测。因此,即使使用相同的数据,差异也会存在,因为损失函数的值几乎总是与预测值不同。这是两件不同的事情。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44476706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档