运行Keras多分类模型时Shapes(None,2)与(None,3)不兼容如何解决
错误原因
- 变量接收顺序错误:
prepa()函数定义的返回值顺序为trainX,trainy,testX,testy,你接收变量时写为trainX, testX, trainy,testy=prepa(),把训练标签trainy和测试特征testX的位置搞反,导致传入训练接口的标签实际是形状为(None,2)的特征数据,和模型输出的3分类概率分布(None,3)维度不匹配。 - 损失函数与标签格式不匹配:你当前使用的
categorical_crossentropy损失要求传入one-hot编码后的标签,而make_blobs生成的标签是0/1/2的整数格式,即使修正变量顺序,直接传入整数标签也会触发维度不匹配报错。
修复方案
- 首先修正变量接收顺序:
# 替换原有的变量接收代码 trainX, trainy, testX, testy = prepa()
- 选择以下任意一种方案处理损失与标签的匹配问题:
方案1:适配现有损失,把标签转成one-hot编码
在拿到数据集后添加标签编码代码即可:
trainy = to_categorical(trainy, 3) testy = to_categorical(testy, 3)
方案2:更换损失函数,无需修改标签格式
直接把编译时的损失函数替换为适配整数标签的sparse_categorical_crossentropy:
model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
内容的提问来源于stack exchange,提问作者kach haja
相关产品推荐
相关产品推荐

