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

Keras搭建神经网络sequential层输入形状不兼容报错如何解决?

问题根源
  • 特征维度混淆:你打印的x_train形状(20,)中,20是样本数量,不是特征维度。你取training_data第0列作为特征,每个样本仅含1个特征,所以之前设置input_dim=20完全不符合数据实际情况。
  • 输入结构不匹配:numpy数组取单列后会得到一维数组,而Keras Dense层默认要求输入格式为(样本数, 特征维度),因此你传入的一维数组会被框架自动补全为(None, 1)格式,这就是报错中(None,1)的来源。
  • 损失函数不匹配:你当前使用的categorical_crossentropy要求标签为one-hot编码格式,而你的y_train是一维整数标签,格式不匹配后续也会报错。
解决方案
  1. 调整输入数据维度,给特征数组增加最后一维:
x_train = x_train.reshape(-1, 1)
x_test = x_test.reshape(-1, 1)
  1. 修改神经网络首层参数,匹配特征维度:
    删除重复的input_shape参数,仅保留input_dim=1即可:
model.add(Dense(16, input_dim=1, activation='relu'))
  1. 调整损失函数适配整数标签:
    将compile方法中的loss参数改为sparse_categorical_crossentropy,无需手动转换标签为one-hot格式:
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
完整可运行代码
# 数据处理,training_data和testing_data为原numpy数组
x_train = training_data[:, 0]  # 训练集特征,形状为(20,)
y_train = training_data[:, 1]  # 训练集标签,形状为(20,)
x_test = testing_data[:, 0]  # 测试集特征
y_test = testing_data[:, 1]  # 测试集标签

# 增加特征维度
x_train = x_train.reshape(-1, 1)
x_test = x_test.reshape(-1, 1)

# 搭建神经网络
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(16, input_dim=1, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(2, activation='softmax'))

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

# 训练测试
model.fit(x_train, y_train, epochs=10, batch_size=4, validation_data=(x_test, y_test))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:24:02