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

Keras使用SparseCategoricalCrossEntropy时如何匹配输出列与真实类别标签

解决思路

SparseCategoricalCrossEntropy要求输入的真实标签为0 ~ 类别数-1的连续整数索引,你只需要提前建立离散原始标签和整数索引的固定映射关系,就能直接对应模型输出的每一列含义,无需使用独热编码,完全适配内存受限的场景:

  • 生成固定标签映射表
    对你的5个原始标签[1.03, 2.07, -2.09, -974, 366],分别分配0~4的唯一整数索引,生成双向映射字典:
    # 原始标签转训练用整数索引
    label_to_idx = {1.03:0, 2.07:1, -2.09:2, -974:3, 366:4}
    # 预测输出索引转原始标签
    idx_to_label = {v:k for k,v in label_to_idx.items()}
    
    该映射表需要在训练、预测全流程保持一致,此时模型输出的(None, 5)张量中,第i列就对应索引i的原始标签的预测概率,比如第0列对应标签1.03的概率,第1列对应2.07的概率,以此类推。
  • 训练阶段适配
    把训练数据的原始标签全部通过label_to_idx转换为整数索引,直接传给SparseCategoricalCrossEntropy作为目标值即可,无需转换为独热编码,几乎不产生额外内存开销:
    loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
    # 若模型最后一层未加softmax激活,将from_logits设置为True
    
  • 预测阶段取值
    如果你需要获取某个原始标签对应的预测概率,先查映射表拿到对应索引,再取输出张量对应列的数值即可;如果你需要得到预测的原始标签,先通过tf.argmax(预测输出, axis=-1)得到预测的整数索引,再通过idx_to_label转换为原始标签值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:03