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

使用Keras model.fit函数时遭遇InvalidArgumentError错误求助

问题解决:MaxPoolingOp仅支持CPU上的NHWC格式

错误原因

你的错误源于数据格式与TensorFlow/Keras默认要求不匹配。CPU环境下的MaxPooling2D层仅支持NHWC格式(样本数,高度,宽度,通道数),但你当前将图像数据reshape为了NCHW格式(样本数,通道数,高度,宽度),即(120000, 1, 28, 28),这导致池化层执行失败。

修复步骤

1. 调整图像数据格式

将图像reshape为NHWC格式,把通道维度移到最后:

# 替换原reshape代码
images_train_cnn = images_train.reshape(images_train.shape[0], 28, 28, 1).astype('float32')
images_test_cnn = images_test.reshape(images_test.shape[0], 28, 28, 1).astype('float32')
images_validation_cnn = images_validation.reshape(images_validation.shape[0], 28, 28, 1).astype('float32')

执行后,图像形状应为(120000, 28, 28, 1)这类格式。

2. 更新模型输入形状

修改Conv2D层的input_shape参数,匹配NHWC格式:

def cnn_model():
    model = Sequential()
    # 将input_shape从(1,28,28)改为(28,28,1)
    model.add(Conv2D(30, (5, 5), input_shape=(28, 28, 1), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(15, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(50, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

验证与执行

修改完成后,重新运行模型拟合代码即可。此时数据格式符合CPU环境要求,池化层能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:57:01