我使用keras生物医学图像分割来分割脑神经元。我使用model.evaluate()
它给了我Dice coef:0.916
,然而,当我使用model.predict然后通过计算Dice coef循环通过预测图像时,Dice coef是0.82
。任何的想法?
谢谢
问题在于Keras
中的每个指标都以下列方式评估:
batch
,评估度量值。k
批次之后等于计算的k
批次中度量的平均值)。大多数最受欢迎的指标(如mse
,categorical_crossentropy
,mae
)等 - 作为每个示例的损失值的平均值 - 具有这样的属性,这种评估最终得到了正确的结果。但是在Dice Coefficient的情况下 - 它在所有批次中的值的平均值不等于在整个数据集上计算的实际值,并且model.evaluate()
使用这种计算方式 - 这是您的问题的直接原因。
keras.evaluate()
函数将为您提供每批的损失值。对于所有批次,keras.predict()
函数将为您提供批次中所有样品的实际预测。因此,即使您使用相同的数据,也会存在差异,因为损失函数的值几乎总是与预测值不同。这是两件不同的事情。
model.evaluate
函数预测给定输入的输出,然后计算model.compile
中指定的度量函数,并基于y_true
和y_pred
,并返回计算的度量值作为输出。
model.predict
刚刚返回y_pred
因此,如果您使用model.predict
然后自己计算指标,计算出的指标值应该与model.evaluate
相同
例如,在评估基于RNN / LSTM的模型时,可以使用model.predict
而不是model.evaluate
,其中输出需要在下一个时间步骤中作为输入馈送