Keras model.evaluate() 和 model.predict() 有什么区别?
What is the difference between Keras model.evaluate() and model.predict()?
我使用 Keras 生物医学图像分割来分割大脑神经元。我用 model.evaluate()
它给了我骰子系数:0.916。但是,当我使用model.predict()
,然后通过计算Dice系数循环遍历预测图像时,Dice系数为0.82。为什么这两个值不同?
keras.evaluate()
函数将为您提供每批次的损失值。 keras.predict()
函数将为您提供所有批次中所有样本的实际预测。因此,即使您使用相同的数据,也会存在差异,因为损失函数的值几乎总是与预测值不同。这是两个不同的东西。
问题在于 Keras
中的每个指标都按以下方式评估:
- 对每个
batch
一个指标值进行评估。
- 损失的当前值(在
k
批次之后等于计算的 k
批次中指标的平均值)。
- 最终结果是为所有批次计算的所有损失的平均值。
大多数最流行的指标(如 mse
、categorical_crossentropy
、mae
)等 - 作为每个示例的平均损失值 - 具有 属性 这样的评估最终会得到正确的结果。但是在骰子系数的情况下——它在所有批次中的平均值不等于在整个数据集上计算的实际值,因为 model.evaluate()
使用这种计算方式——这是你问题的直接原因。
model.evaluate
函数预测给定输入的输出,然后根据 y_true
和 y_pred
和 [= 计算 model.compile
中指定的度量函数28=] 计算的度量值作为输出。
model.predict
刚刚 returns 返回 y_pred
因此,如果您使用 model.predict
然后自己计算指标,则计算出的指标值应该与 model.evaluate
相同
例如,在评估基于 RNN/LSTM 的模型时,可以使用 model.predict
而不是 model.evaluate
,在该模型中输出需要作为下一个时间步的输入
这是关于正则化的。 model.predict()
returns 模型的最终输出,即答案。而model.evaluate()
returns则损失。损失用于训练模型(通过反向传播),它不是答案。
这个video of ML Tokyo应该有助于理解model.evaluate()
和model.predict()
之间的区别。
我使用 Keras 生物医学图像分割来分割大脑神经元。我用 model.evaluate()
它给了我骰子系数:0.916。但是,当我使用model.predict()
,然后通过计算Dice系数循环遍历预测图像时,Dice系数为0.82。为什么这两个值不同?
keras.evaluate()
函数将为您提供每批次的损失值。 keras.predict()
函数将为您提供所有批次中所有样本的实际预测。因此,即使您使用相同的数据,也会存在差异,因为损失函数的值几乎总是与预测值不同。这是两个不同的东西。
问题在于 Keras
中的每个指标都按以下方式评估:
- 对每个
batch
一个指标值进行评估。 - 损失的当前值(在
k
批次之后等于计算的k
批次中指标的平均值)。 - 最终结果是为所有批次计算的所有损失的平均值。
大多数最流行的指标(如 mse
、categorical_crossentropy
、mae
)等 - 作为每个示例的平均损失值 - 具有 属性 这样的评估最终会得到正确的结果。但是在骰子系数的情况下——它在所有批次中的平均值不等于在整个数据集上计算的实际值,因为 model.evaluate()
使用这种计算方式——这是你问题的直接原因。
model.evaluate
函数预测给定输入的输出,然后根据 y_true
和 y_pred
和 [= 计算 model.compile
中指定的度量函数28=] 计算的度量值作为输出。
model.predict
刚刚 returns 返回 y_pred
因此,如果您使用 model.predict
然后自己计算指标,则计算出的指标值应该与 model.evaluate
例如,在评估基于 RNN/LSTM 的模型时,可以使用 model.predict
而不是 model.evaluate
,在该模型中输出需要作为下一个时间步的输入
这是关于正则化的。 model.predict()
returns 模型的最终输出,即答案。而model.evaluate()
returns则损失。损失用于训练模型(通过反向传播),它不是答案。
这个video of ML Tokyo应该有助于理解model.evaluate()
和model.predict()
之间的区别。