Keras - 损失和度量的计算方式不同?

Posted

技术标签:

【中文标题】Keras - 损失和度量的计算方式不同?【英文标题】:Keras - Loss and Metric calculated differently? 【发布时间】:2018-07-21 00:47:42 【问题描述】:

我在 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

【问题讨论】:

我们无法猜测您的代码是什么样的。 :-) 这是一个普遍的问题,与模型无关。但是,我会发布一些代码。如果这还不够,请要求更多!谢谢:) 已更新,包含代码。 【参考方案1】:

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

loss = mse + regularization

这就是你的差异的来源。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Keras - 损失和度量的计算方式不同?的主要内容,如果未能解决你的问题,请参考以下文章

tf.keras中度量和损失MSE之间的差异[重复]

当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用啥损失函数?

为啥在 Keras 度量函数中使用 axis=-1?

损失函数正在减少,但度量函数保持不变?

Keras weighted_metrics 在计算中不包括样本权重[关闭]

我可以在keras中对模型的一部分运行度量吗?