如何使用自定义训练的Keras模型进行预测,解决输入维度不兼容问题
错误根因与修复方案
1. 预测输入维度不匹配
你调用predict时传入的pd.DataFrame([1, 3, 0, 3, 3, 1, 2, 3, 2])生成的是9行1列的二维表,而模型训练时接收的是每行9个特征的输入,要求最后一维长度为9,形状不匹配触发报错。
修复方法:
将预测输入改为1行9列的结构,同时保持列名和训练集特征列一致,避免pandas列顺序错乱导致特征错位:
# 正确写法1:套外层列表生成1行9列的DataFrame result = model.predict(pd.DataFrame([[1, 3, 0, 3, 3, 1, 2, 3, 2]], columns=train.columns)) # 正确写法2:直接用numpy数组输入 result = model.predict(np.array([[1, 3, 0, 3, 3, 1, 2, 3, 2]]))
如果需要获取最终的预测类别编号,可对输出的logits取最大值对应的索引:
pred_class = np.argmax(result, axis=1)
2. 网络结构优化建议
你当前模型第一层用了输出维度为1的全连接层,会直接把9维特征压缩到1维,丢失大量原始特征信息,虽然当前数据集简单准确率达标,但结构不合理,可调整为:
model = tf.keras.Sequential([ # 显式指定输入形状,避免隐式形状推断出错 tf.keras.layers.Dense(64, activation='relu', input_shape=(9,)), tf.keras.layers.Dense(100, activation='relu'), tf.keras.layers.Dense(4) ])
调整后模型收敛速度和泛化能力都会有所提升。
内容的提问来源于stack exchange,提问作者pullidea-dev
相关产品推荐
相关产品推荐

