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

Keras训练MNIST全连接网络时出现输入形状不兼容错误如何修复

错误原因
  • 输入形状不兼容:MNIST数据集加载后的原始图像数据形状为(样本数, 28, 28),对应单通道28*28像素的手写数字图,但你搭建的全连接网络第一层定义的输入形状为(28,),仅能接收长度为28的一维向量,二者维度不匹配触发报错。
  • 额外隐藏问题:你当前使用的损失函数categorical_crossentropy要求标签为独热编码格式,直接加载的train_y/test_y是0-9的整数标签,不处理的话形状匹配后也会触发报错。
修复方案

你只需要做3处修改即可:

  1. 将28*28的二维图像压平为长度784的一维向量,同时对像素值做归一化处理提升训练稳定性
  2. 修正模型输入维度为784
  3. 对标签做独热编码,或者将损失函数替换为sparse_categorical_crossentropy省去编码步骤

以下是修复后的完整可运行代码:

from keras.utils import np_utils
from keras.datasets import mnist 
from keras.models import Sequential
from keras.layers import Dense, BatchNormalization, Dropout, Activation
import seaborn as sns
from keras.initializers import RandomNormal
from keras.initializers import he_normal
import matplotlib.pyplot as plt

(train_X, train_y), (test_X, test_y) = mnist.load_data()

# 新增:将图像压平为一维向量,同时归一化像素值到0-1
train_X = train_X.reshape(-1, 28*28).astype('float32') / 255
test_X = test_X.reshape(-1, 28*28).astype('float32') / 255
# 新增:将标签转换为独热编码
train_y = np_utils.to_categorical(train_y, 10)
test_y = np_utils.to_categorical(test_y, 10)

output_dim = 10
# 修改:输入维度改为784
input_dim = train_X.shape[1]

batch_size = 128
nb_epoch = 20

model_drop = Sequential()
model_drop.add(Dense(512, activation='relu', input_shape=(input_dim,),kernel_initializer=he_normal(seed=None)))
model_drop.add(BatchNormalization())
model_drop.add(Dropout(0.5))

model_drop.add(Dense(128, activation= 'relu', kernel_initializer=he_normal(seed=None)))
model_drop.add(BatchNormalization())
model_drop.add(Dropout(0.5))

model_drop.add(Dense(output_dim, activation = 'softmax'))

model_drop.summary()

model_drop.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

history = model_drop.fit(train_X, train_y, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_split=0.1)

你提到的错误截图如下:
错误截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:03