TensorFlow:损失和度量标准应该相同吗?

时间:2019-11-15 11:34:48

标签: tensorflow

我将二进制交叉熵用作损失函数和指标。

但是,我看到的损耗和指标值不同。它们非常相似,但是有所不同。

为什么会这样?我正在使用tf.keras.losses.binary_crossentropy(y_true, y_pred) 对于两者。

enter image description here

损失:0.1506,度量值是0.1525,这是不同的

1 个答案:

答案 0 :(得分:2)

如果使用与损耗和度量相同的功能,则通常在深度网络中将看到不同的结果。通常,这仅是由于floating point precision errors造成的:即使数学方程式是等效的,操作也不以相同的顺序运行,这可能导致很小的差异。
这正是您的情况。

但是,如果您使用任何Regularizer,则损失和指标的差异会更大,因为Regularizers会对损失函数进行惩罚,以避免过拟合。

理想情况下,度量和损失的工作方式相同,让我们看一下文档中的示例并进行比较。

以二进制交叉熵作为度量标准:

m.update_state([[0, 1], [0, 0]], [[0.6, 0.4], [0.4, 0.6]])
m.result().numpy() 

0.81492424

二进制交叉熵作为损失:

y_true = [[0., 1.], [0., 0.]]
y_pred = [[0.6, 0.4], [0.4, 0.6]]
bce = tf.keras.losses.BinaryCrossentropy()
bce(y_true, y_pred).numpy() 

0.81492424

希望这能回答您的问题,快乐学习!