运行6输入6输出神经网络遇ValueError:Dense层输入维度不兼容
解决Keras输入维度不兼容问题(expected min_ndim=2, found ndim=1)
问题原因
Keras的Dense层要求输入至少是2维张量,形状为(样本数, 特征数)。你传入的[x1,x2,x3,x4,x5,x6]是1维列表,形状为(6,),模型无法识别这是1个带6个特征的样本,因此抛出维度不兼容错误。
解决步骤
- 将输入、输出数据转换为2维结构(嵌套列表或numpy数组),让形状变为
(1, 6)(1个样本,6个特征/输出) - 单个样本训练时,
batch_size不能大于样本数量,需调整为1
修正后的完整代码
import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 输入:转为2维数组(1个样本,6个特征) X = np.array([[0, 0, 0, 0, 0, 0]]) # 输出:转为2维数组(1个样本,6个输出) y = np.array([[0, 0, 0, 0, 0, 1]]) # 创建模型 model = Sequential() model.add(Dense(12, input_dim=6, activation='relu')) model.add(Dense(6, activation='sigmoid')) # 编译模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型:单个样本时batch_size设为1 model.fit(X, y, epochs=150, batch_size=1) # 评估模型 scores = model.evaluate(X, y) print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
补充说明
如果后续有多个训练样本,比如N个,输入形状要对应(N, 6),输出对应(N, 6),此时可以根据样本数量设置合理的batch_size(比如10)。
内容的提问来源于stack exchange,提问作者Omega_skyres 9
相关产品推荐
相关产品推荐

