我使用Keras进行生物医学图像分割来分割脑神经元。我使用了model.evaluate()
,它给出了Dice系数为0.916。然而,当我使用model.predict()
,然后通过计算Dice系数来循环处理预测的图像时,Dice系数为0.82。为什么这两个值不同?
回答:
问题在于Keras
中的每个指标都是以下列方式评估的:
- 对于每个
batch
,评估一个指标值。 - 当前的损失值(在
k
个批次之后)等于在计算的k
个批次中该指标的平均值。 - 最终结果是所有批次计算出的所有损失的平均值。
大多数常用指标(如mse
、categorical_crossentropy
、mae
等)作为每个样本的损失值的平均值,具有这样的评估最终得到正确结果的特性。但在Dice系数的情况下,跨所有批次的其值的平均值并不等于在整个数据集上计算的实际值,而model.evaluate()
使用这种计算方式——这是您问题直接的原因。