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

TensorFlow报错:sparse_categorical_crossentropy下logits与labels维度不匹配

解决TensorFlow中“logits and labels must have the same first dimension”错误

错误原因

你用pd.get_dummies把取值1-5的Score标签转换成了独热编码格式(形状为(样本数量, 5)),但sparse_categorical_crossentropy损失函数的设计目标是处理整数索引格式的标签(形状为(样本数量,),每个值是1-5的整数)。两者维度不匹配,就触发了这个错误。

两种解决方法

方法一:更换损失函数为categorical_crossentropy

独热编码标签对应categorical_crossentropy损失函数,直接修改模型编译代码:

model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['accuracy']
)
  • 若模型最后一层使用了softmax激活,直接用上述代码即可;
  • 若最后一层未加激活函数,需在损失函数中指定from_logits=True:
    loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True)
    

方法二:将独热编码标签转回整数索引格式

放弃pd.get_dummies的独热编码处理,直接使用原始的Score值,或者把已生成的独热编码转成整数索引:

# 假设独热编码标签存储在df['one_hot_labels']列,转回整数索引
labels = df['one_hot_labels'].idxmax(axis=1)

# 或者直接使用原始的Score列(无需转换为0开始的索引,sparse_categorical_crossentropy支持1-5的类别)
labels = df['Score'].values

之后继续使用sparse_categorical_crossentropy作为损失函数即可。

额外注意

模型最后一层的Dense单元数必须设置为5(对应1-5共5个类别),例如:

model.add(Dense(5, activation='softmax'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:33:11