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

Python训练DNN模型遇Flatten层输入维度不匹配错误求解

问题分析

你遇到的错误Error when checking input: expected flatten_input to have 3 dimensions, but got array with shape (940682, 2),核心原因是模型输入层的期望形状和你的训练数据形状不匹配:

  • 你的模型里Flatten(input_shape=(28, 28))表示:每个输入样本是一个28×28的二维张量(比如MNIST手写数字图像),所以整个输入数据的形状应该是(样本数量, 28, 28)(三维数组)。
  • 但你的X_train形状是(940682, 2),是一个二维数组,每个样本只有2个特征,和模型期望的完全不符。
解决方案

根据你的实际任务类型,选择对应的调整方式:

情况1:你的任务是普通表格数据分类(每个样本2个特征)

如果你的数据不是图像,而是每个样本只有2个数值特征的表格数据,那你不需要用Flatten层,直接把输入层改成适配2维特征的Dense层即可:

model = tf.keras.models.Sequential([ 
    # 直接指定输入形状为(2,),对应每个样本的2个特征
    tf.keras.layers.Dense(128, activation='relu', input_shape=(2,)), 
    tf.keras.layers.Dropout(0.2), 
    tf.keras.layers.Dense(10, activation='softmax')
]) 
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) 
model.fit(X_train, y_train, epochs=5)

情况2:你确实要处理28×28的图像数据

如果你的数据原本应该是28×28的图像,但加载后被错误处理成了(940682, 2)的形状,那你需要先检查数据加载的代码,确认哪里出了问题:

  • 首先确认原始数据的格式:比如是不是CSV文件里的列数不对?或者加载时错误地选取了只有2列的数据?
  • 这里要注意:940682 × 2 = 1881364,而28×28=784,1881364无法被784整除,这说明你的数据本身可能不是28×28的图像,这种情况下建议重新核对数据源。
额外提示

在训练模型前,最好先打印输入数据的形状,提前确认和模型输入层匹配:

print("X_train shape:", X_train.shape)
print("y_train shape:", y_train.shape)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:57:37