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

Keras分类CSV格式MNIST数据集报形状不兼容错误如何解决?

报错原因

  • 全连接Dense层默认仅对输入张量的最后一个维度执行全连接计算,你当前输入到模型的x_train形状为(60000, 28, 28),第一层Dense的输入形状设置为(28,28),因此每经过一层Dense,输出形状都会保留前两个维度,到最后输出层时输出形状为(None, 28, 10)
  • 你的标签y_train是独热编码后的(None, 10)形状,二者维度不匹配,因此损失函数计算时报错

修正方案

方案1:在输入层后添加展平层(最简便)

在模型第一层之前添加Flatten层,把二维的28*28图像展平为一维的784维向量,修正后的模型定义部分代码如下:

model = Sequential()
# 新增Flatten层,将(28,28)的二维输入展平为(784,)的一维向量
model.add(layers.Flatten(input_shape=(x_train.shape[1:])))
model.add(Dense(units=32, activation='sigmoid'))
model.add(Dense(units=64, activation='sigmoid'))
model.add(Dense(units=10,activation='softmax'))

方案2:提前对训练数据做维度压缩

在加载数据后直接将x的形状从(60000,28,28)修改为(60000, 784),对应修改模型输入形状即可:

# 加载数据后新增代码
x_train = x_train.reshape(x_train.shape[0], -1)
x_test = x_test.reshape(x_test.shape[0], -1)

# 模型输入层对应修改为
model.add(Dense(units=32, activation='sigmoid',input_shape=(784,)))

额外优化建议

你可以对输入像素值做归一化处理,模型收敛速度会明显提升:

x_train = x_train / 255.0
x_test = x_test / 255.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:42:03