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

Sae*_*ari 9 machine-learning neural-network image-segmentation deep-learning keras

我使用Keras生物医学图像分割技术来分割脑神经元。我用model.evaluate()它给了我骰子系数:0.916。但是,当我使用时model.predict(),通过计算Dice系数遍历预测图像,Dice系数为0.82。为什么这两个值不同?

Par*_*kar 14

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

  • 准确地说, keras.evaluate 不是衡量分类器在现实世界中工作准确度的可靠方法。人们应该有自己的代码来计算这个。 (4认同)
  • 但话又说回来,“model.evaluate()”*不仅*给出了损失,而且还给出了“model.compile”中定义的指定准确度指标,就像 @javac 指出的那样。`model.metrics_name` 显示 `evaluate()` 输出的内容 (2认同)

Mar*_*jko 8

问题在于,每个指标的Keras评估方式如下:

  1. 对于每个batch度量值都将进行评估。
  2. 当前的损耗值(k批次后等于计算k批次中指标的平均值)。
  3. 获得的最终结果是所有批次计算的所有损失的平均值。

最最流行的指标(如msecategorical_crossentropymae)等-的平均每个实施例中的损耗值的-有一个属性,这样的评估端了一个正确的结果。但是,在骰子系数的情况下-所有批次中其值的平均值不等于在整个数据集上计算出的实际值,并且model.evaluate()使用这种计算方式-这是造成问题的直接原因。


Foo*_*167 8

这是关于正则化。model.predict()返回模型的最终输出,即答案。虽然model.evaluate()返回损耗。损失用于训练模型(通过反向传播),它不是答案。

ML东京的视频应该有助于理解之间的差异model.evaluate()model.predict()


jav*_*vac 6

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

model.predict刚刚返回的y_pred

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

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