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

神经网络训练报错:期望输入形状(45781,)但得到(2,)求解决

解决Keras训练时的输入形状不匹配问题

嘿,我一眼就看出你遇到的ValueError问题出在哪了——输入层的维度参数完全用错了!咱们一步步理清楚:

错误核心原因

你写的这行代码:

classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 45781))

这里的input_dim参数是告诉Keras单个样本有多少个特征,而不是你的数据集总共有多少个样本!你的X是取了前2列,每个样本只有2个特征,所以input_dim应该设为2,而不是样本总数45781——这就是为什么Keras报错说期望形状是(45781,),但实际拿到的是(2,)。

另外,你的代码里还用了一些Keras的过时参数(比如output_dim、init、nb_epoch),虽然旧版本可能兼容,但建议换成最新写法,避免后续踩坑。

修正后的完整代码

我帮你把代码调整好了,顺便梳理了标签处理的逻辑(你之前做了多种编码,这里统一用LabelBinarizer更清晰):

import pandas as pd
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense

# 假设df是你的原始CSV数据DataFrame
# 提取特征:前2列,每个样本2个特征
X = df.iloc[:, 0:2].values
# 处理标签:对Type列做二值/多值编码
lb = LabelBinarizer()
y_processed = lb.fit_transform(df['Type'])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y_processed, test_size=0.4)

# 构建神经网络
classifier = Sequential()
# 输入层:input_dim设为单个样本的特征数2
classifier.add(Dense(units=6, kernel_initializer='uniform', activation='relu', input_dim=2))
# 隐藏层
classifier.add(Dense(units=6, kernel_initializer='uniform', activation='relu'))
# 输出层:根据分类任务调整
# 如果是二分类:保持units=1 + sigmoid激活 + binary_crossentropy损失
# 如果是多分类:改成units=len(lb.classes_) + softmax激活 + categorical_crossentropy损失
classifier.add(Dense(units=1, kernel_initializer='uniform', activation='sigmoid'))

# 编译模型
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 训练模型:用epochs替代过时的nb_epoch
classifier.fit(X_train, y_train, batch_size=10, epochs=100)

额外注意事项

  1. 标签与输出层匹配:如果你的Type列是多分类(超过2个类别),记得把输出层改成units=len(lb.classes_),激活函数换成softmax,损失函数换成categorical_crossentropy,否则训练会出问题。
  2. 为什么之前的LSTM方案没用:你参考的问题是LSTM层的输入要求(需要3维数据:样本数、时间步、特征数),但你用的是全连接Dense层,只需要2维数据(样本数、特征数),两者场景完全不同,所以那个解决方案不适用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:49:39