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

Keras Dense层输入维度不兼容报错:期望min_ndim=2,实际ndim=1

问题:Dense层输入维度不兼容错误

编译程序时触发如下错误:

ValueError: Input 0 of layer "dense_9" is incompatible with the layer: expected min_ndim=2, found ndim=1. Full shape received: (None,)

程序代码如下:

data_array = np.array([2.5, 3, 3.5, 4, 4.5])

target_array = np.array([2, 2.5, 3, 3.5, 4])

array1 = {'data': data_array, 'target': target_array}

class array1:

  data = array1["data"]

  target = array1["target"]

obiect = array1()

X_train, X_vaild, y_train, y_vaild = train_test_split(
    obiect.data, obiect.target)

model = keras.models.Sequential([
    keras.layers.Dense(30, activation='relu', input_shape=X_train.shape[1:]),
])

model.compile(loss=tf.keras.losses.MeanSquaredError(), optimizer="sgd")

history = model.fit(X_train, y_train, epochs=190,
                    validation_data=(X_vaild, y_vaild))

注:当data_array为多值列表时程序可正常运行,但传入单个值时会触发上述错误。


解决方案

核心原因

Keras的Dense层要求输入必须是至少2维的张量,格式为(样本数量, 特征数量)。当传入单个值时,拆分后的X_train会变成1维数组(形状为(None,)),不符合层的输入维度要求,因此报错。

具体修复方法

方法1:给输入数据增加维度

在拆分数据集后,通过np.expand_dims或索引语法给输入数组新增一个维度,将1维数组转为2维列向量:

# 拆分数据集后添加这两行
X_train = np.expand_dims(X_train, axis=1)
X_vaild = np.expand_dims(X_vaild, axis=1)

# 或者用更简洁的写法
X_train = X_train[..., np.newaxis]
X_vaild = X_vaild[..., np.newaxis]

方法2:直接指定Dense层的输入形状

如果不想修改数据结构,可以直接在Dense层中明确指定input_shape=(1,),告诉模型输入是单特征的2维数据:

model = keras.models.Sequential([
    keras.layers.Dense(30, activation='relu', input_shape=(1,)),
])

额外建议:避免命名冲突

原代码中字典和类都使用array1作为名称,容易引发变量混淆,建议修改命名:

data_dict = {'data': data_array, 'target': target_array}

class Dataset:
    data = data_dict["data"]
    target = data_dict["target"]

obiect = Dataset()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:06