Machine learning Keras model.evaluate()和model.predict()之间的区别是什么?

Machine learning Keras model.evaluate()和model.predict()之间的区别是什么?,machine-learning,neural-network,deep-learning,keras,image-segmentation,Machine Learning,Neural Network,Deep Learning,Keras,Image Segmentation,我使用Keras生物医学图像分割来分割大脑神经元。我使用了model.evaluate()它给了我骰子系数:0.916。但是,当我使用model.predict()时,通过计算骰子系数循环预测图像,骰子系数为0.82。为什么这两个值不同?函数将为每个批次提供损失值。keras.predict()。因此,即使使用相同的数据,差异也会存在,因为损失函数的值几乎总是不同于预测值。这是两件不同的事情。问题在于,Keras中的每一项指标都以以下方式进行评估: 对于每个批次评估一个度量值 损失的当前值(在k

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

函数将为每个批次提供损失值。
keras.predict()。因此,即使使用相同的数据,差异也会存在,因为损失函数的值几乎总是不同于预测值。这是两件不同的事情。

问题在于,
Keras
中的每一项指标都以以下方式进行评估:

  • 对于每个
    批次
    评估一个度量值
  • 损失的当前值(在
    k
    批次之后等于计算的
    k
    批次中度量的平均值)
  • 最终结果作为所有批次计算的所有损失的平均值

  • 大多数最流行的指标(如
    mse
    分类交叉熵
    mae
    )等——作为每个示例的损失平均值——都具有这样一个特性,即这种评估最终会得到一个正确的结果。但在骰子系数的情况下,所有批次中其值的平均值不等于整个数据集上计算的实际值,即
    model.evaluate()
    使用这种计算方法-这是问题的直接原因。

    模型。evaluate
    函数预测给定输入的输出,然后计算
    模型中指定的度量函数。编译
    并基于
    y\u true
    y\u pred
    返回计算出的度量值输出

    model.predict
    只返回
    y\u pred

    因此,如果您使用
    model.predict
    然后自己计算度量值,那么计算出的度量值应该与
    model.evaluate


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

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


    这应该有助于理解
    model.evaluate()
    model.predict()

    准确地说,keras.evaluate不是衡量分类器在实际世界中工作的准确程度的可靠方法。人们应该有自己的代码来计算这一点。但是,正如@javac指出的那样,
    model.evaluate()
    不仅给出了损失,还给出了
    model.compile
    中定义的特定精度指标<代码>模型。度量\u name
    显示
    评估()的输出