keras model.evaluate()和model.predict()之间的区别

问题描述 投票:4回答:3

我使用keras生物医学图像分割来分割脑神经元。我使用model.evaluate()它给了我Dice coef:0.916,然而,当我使用model.predict然后通过计算Dice coef循环通过预测图像时,Dice coef是0.82。任何的想法?

谢谢

machine-learning neural-network deep-learning keras image-segmentation
3个回答
5
投票

问题在于Keras中的每个指标都以下列方式评估:

  1. 对于每个batch,评估度量值。
  2. 当前损失值(在k批次之后等于计算的k批次中度量的平均值)。
  3. 最终结果是作为所有批次计算的所有损失的平均值获得的。

大多数最受欢迎的指标(如msecategorical_crossentropymae)等 - 作为每个示例的损失值的平均值 - 具有这样的属性,这种评估最终得到了正确的结果。但是在Dice Coefficient的情况下 - 它在所有批次中的值的平均值不等于在整个数据集上计算的实际值,并且model.evaluate()使用这种计算方式 - 这是您的问题的直接原因。


3
投票

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


3
投票

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

model.predict刚刚返回y_pred

因此,如果您使用model.predict然后自己计算指标,计算出的指标值应该与model.evaluate相同

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

© www.soinside.com 2019 - 2024. All rights reserved.