Machine learning Keras model.evaluate()和model.predict()之间的区别是什么?
我使用Keras生物医学图像分割来分割大脑神经元。我使用了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
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
显示评估()的输出