Keras - Loss 和 Metric 的计算方式不同?

Keras - Loss and Metric calculated differently?

我在 Keras 中有一个模型,我正在优化均方误差。但是,如果我在指标中使用与 Keras losses.py 中相同的代码,我会得到不同的结果。这是为什么?

作为指标:

def MSE_metric(y_true, y_pred):
    return K.mean(K.square(y_pred, y_true))

对于模型:

model.compile(optimizer=SGD(lr=0.01, momntum=0.9), loss='MSE', metrics=[MSE_metric])

这导致损失 6.07,但 MSE_metric 为 0.47

请记住 - 如果您使用任何类型的正则化 - 它会影响您的 loss。您的实际损失等于:

loss = mse + regularization

这就是你的差异的来源。

Marcin 是对的。 Here 我探索了正则化和分成批次的效果。两者都会影响记录在日志中的训练损失,但正则化的影响最大。始终建议在拟合模型后使用 model.evaluate 计算指标。 如果想在训练期间看到 'actual' 损失,一个技巧是将验证集设置为与训练集相同(如果数据太多,则设置为训练集的子集)。与训练损失不同,验证指标只是在拟合模型上进行评估。