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

文本数据CNN模型训练报错:Shapes (None,1)与(None,10)不兼容

解决CNN训练时形状不兼容的ValueError

问题核心原因

报错ValueError: Shapes (None, 1) and (None, 10) are incompatible的本质是模型输出与标签的格式/形状不匹配:

  • 模型最后一层输出形状为(None, 10),对应10分类任务;
  • 你的标签y_train、y_test是一维整数数组(形状(172,)、(30,)),但当前使用的categorical_crossentropy损失函数要求标签为独热编码格式(形状需为(样本数, 10));
  • 额外问题:多分类任务的输出层用relu激活函数是错误的,应改用softmax(输出每个类别的概率分布,符合分类任务逻辑)。

解决方案一:转换标签为独热编码

保持损失函数不变,将一维整数标签转换为独热编码格式:

from tensorflow.keras.utils import to_categorical

# num_classes对应模型的分类数10
y_train = to_categorical(y_train, num_classes=10)
y_test = to_categorical(y_test, num_classes=10)

转换后y_train形状变为(172, 10),与模型输出形状完全匹配。


解决方案二:更换损失函数(更简便)

使用sparse_categorical_crossentropy损失函数,该函数专门适配一维整数标签的多分类任务,无需修改标签数据:

# 修改模型编译语句的loss参数
model.compile(loss='sparse_categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])

必须修正的激活函数问题

多分类任务的输出层必须使用softmax激活函数,替换原来的relu:

# 替换原有的Dense(10)+Activation('relu')
model.add(Dense(10, activation='softmax'))

或者分开写:

model.add(Dense(10))
model.add(Activation('softmax'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:00:42