如果您使用与损失和度量相同的函数,通常在深度网络中您会看到不同的结果。这一般只是由于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
希望这能回答您的问题,快乐学习!