You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Keras中loss与同类型sparse_categorical_crossentropy指标数值存在差异?

问题解答

你遇到的数值差异根本原因是损失函数和指标的参数设置不一致,和归一化无关。

具体来说:

  • 你在loss参数里用的是tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),明确指定了输入是未经过softmax的logits,计算时会自动处理logits到概率的转换;
  • 而metrics里写的是字符串'sparse_categorical_crossentropy',Keras会用这个损失函数的默认参数初始化实例,也就是from_logits=False——它默认输入是已经经过softmax的概率值,所以计算逻辑和loss完全不一样,数值自然不同。

解决方法很简单,把metrics改成和loss一致的实例即可:

model.compile(
    optimizer="rmsprop",
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
    metrics=[tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)]
)

这样loss和指标的计算逻辑完全相同,训练时对应的数值就会一致了。

内容的提问来源于stack exchange,提问作者user3433489

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:32:03