我将二进制交叉熵用作损失函数和指标。
但是,我看到的损耗和指标值不同。它们非常相似,但是有所不同。
为什么会这样?我正在使用tf.keras.losses.binary_crossentropy(y_true, y_pred)
对于两者。
损失:0.1506,度量值是0.1525,这是不同的
答案 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
希望这能回答您的问题,快乐学习!