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

运行Keras手写数字识别CNN代码报输入维度不匹配错误如何解决

问题原因
  • 数据维度顺序不匹配:Keras默认使用channels_last维度格式,要求输入张量维度顺序为(样本数, 高度, 宽度, 通道数),但你当前代码将MNIST数据reshape为(样本数, 通道数, 高度, 宽度)的channels_first格式,和模型第一层定义的input_shape=(28,28,1)要求不匹配,这是触发本次报错的直接原因
  • 变量名大小写错误:导入模型类时写的是小写sequential,实际实例化用的是大写Sequential;标注变量定义为小写y_train、y_test,调用fit和evaluate时写的是大写Y_train、Y_test,会额外触发变量未定义错误
  • 卷积层参数写法不规范:旧版Keras中Convolution2D(32,3,3)的写法在新版本中会被错误解析为步长参数,需要明确指定kernel_size参数避免后续运行异常
修复后的完整代码
import numpy as np
np.random.seed(123) # 保证结果可复现

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist

(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 修正维度顺序为Keras默认的channels_last格式
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)

model = Sequential()

# 明确指定卷积核大小,避免参数解析错误
model.add(Convolution2D(32, kernel_size=(3,3), activation='relu', input_shape=(28,28,1)))
model.add(Convolution2D(32, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

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

# 修正变量名大小写
model.fit(X_train, y_train, 
          batch_size=32, epochs=10, verbose=1)
score = model.evaluate(X_test, y_test, verbose=0)
补充说明

如果你的环境强制要求使用channels_first格式,也可以不用修改reshape逻辑,仅将模型第一层的input_shape改为(1,28,28),同时在Keras全局配置中指定image_data_format='channels_first'即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:03