我用Keras生物医学图像分割来分割脑细胞。我用了model.evaluate(),它给了我骰子系数: 0.916。然而,当我使用model.predict(),然后循环通过计算骰子系数预测图像,骰子系数是0.82。为什么这两个价值观是不同的?
发布于 2017-06-11 20:41:04
问题在于,Keras中的每个度量都是以下列方式计算的:
batch,计算一个度量值。k批处理之后,等于计算出的k批的度量平均值)。大多数最流行的度量标准(如mse、categorical_crossentropy、mae等)--作为每个示例的损失值的平均值--都具有这样的评估最终得到适当结果的属性。但是,在Dice系数的情况下--在所有批次中其值的平均值并不等于在整个数据集中计算的实际值,而且由于model.evaluate()使用这种计算方法--这是造成问题的直接原因。
发布于 2019-03-07 17:47:59
model.evaluate函数预测给定输入的输出,然后计算model.compile中指定的基于y_true和y_pred的度量函数,并将计算出来的度量值作为输出返回。
model.predict只返回y_pred
因此,如果您使用model.predict,然后自己计算度量,则计算出来的度量值应该与model.evaluate相同。
例如,在评估基于RNN/ LSTM的模型时,可以使用model.predict而不是model.evaluate,在该模型中,需要在下一时间步骤将输出作为输入输入。
发布于 2017-06-10 19:57:55
keras.evaluate()函数将给出每个批的损失值。keras.predict()函数将为批处理中的所有样本和所有批次提供实际预测。因此,即使使用相同的数据,差异也会存在,因为损失函数的值几乎总是与预测值不同。这是两件不同的事情。
https://stackoverflow.com/questions/44476706
复制相似问题