Keras神经网络训练nb_epoch参数报错及输入维度不匹配如何解决?
问题排查与解决方案
第一个报错:fit() got an unexpected keyword argument 'nb_epoch'
- 原因:Keras 2.0版本后已经废弃了老版本的
nb_epoch参数,迭代次数参数统一修改为epochs,你尝试的nb_epochs、epoch均不是合法参数,所以会报错。 - 修复方法:直接将fit方法的参数改为
epochs=100即可解决该问题。
第二个报错:ValueError: Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 11 but received input with shape (None, 1)
- 原因:你的神经网络第一层全连接层指定了
input_dim = 11,代表要求输入的每个样本包含11个特征,但你传入的训练集X_train的维度不匹配,每个样本仅包含1个特征。 - 排查修复步骤:
- 先打印训练集特征维度确认问题:运行
print(X_train.shape),符合第一层配置的正常输出应为(样本数量, 11),你当前的输出大概率为(样本数量, 1)或者一维结构(样本数量,)。 - 根据业务场景选择对应修复方案:
- 如果你实际每个样本仅含1个特征:将第一层Dense的参数
input_dim = 11修改为input_dim = 1即可。如果你的X_train是一维数组,还需要先调整维度:X_train = X_train.reshape(-1, 1)。 - 如果你实际每个样本应该有11个特征:说明你在数据预处理、数据集拆分环节出现了错误,丢失了其余10个特征,需要回溯检查数据读取、特征工程、训练集测试集拆分的代码,确保
X_train最终维度为(样本数, 11)。
- 先打印训练集特征维度确认问题:运行
额外注意事项
你当前的网络配置是二分类任务的配置(输出层sigmoid激活+二分类交叉熵损失),如果你的需求是预测连续的价格数值(回归任务),需要调整输出层和编译参数:
# 回归任务输出层,无激活函数默认使用linear线性激活 classifier.add(Dense(1, kernel_initializer = 'uniform')) # 编译时使用回归任务损失函数 classifier.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'])
内容的提问来源于stack exchange,提问作者Ashish Dhage
相关产品推荐
相关产品推荐

