为何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
相关产品推荐
相关产品推荐

