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

Keras LSTM模型调用model.predict触发ValueError输入维度不匹配

问题解答

首先明确:你确实需要将输入ids的序列长度填充到500以匹配训练规格,同时还需要补充样本维度,两个修改点共同解决报错问题

报错原因

你的模型输入要求是形状为(样本数, 序列长度=500, 特征数=5)的3维张量,而你当前的预测输入形状为(4,5),存在两个不符合要求的点:

  • 序列长度只有4,远小于要求的500
  • 缺少样本维度,输入为2维张量,不符合模型3维输入的要求

具体解决步骤

  1. 统一序列长度
    对转换得到的ids序列做对齐处理,和你训练阶段的填充/截断策略保持一致即可:
    • 序列长度小于500时,在序列前/后补全值为0的[0,0,0,0,0]特征数组,直到总长度为500
    • 序列长度大于500时,截断保留最后500个序列元素即可(下一个元素预测任务保留最近上下文效果更优)
  2. 补充样本维度
    单样本预测时,需要在0轴新增一个样本维度,将形状为(500,5)的数组转换为(1,500,5)的3维张量,匹配模型输入要求

修改后的预测函数参考

import numpy as np
from tensorflow.keras.preprocessing.sequence import pad_sequences

def predict(text):
  text = text.split(" ")
  ids = []
  for i in text:
     ids.append(texids[np.where(textfull == i)][0])
  # 第一步:填充/截断到序列长度500,padding和truncating参数和训练时保持一致即可
  ids = pad_sequences([ids], maxlen=500, padding='pre', truncating='pre', value=[0,0,0,0,0])[0]
  # 第二步:新增样本维度,转成3维张量
  ids = np.expand_dims(ids, axis=0)
  print(ids.shape) # 输出应为 (1, 500, 5)
  pred = model.predict(x = ids)
  # 后续可添加id转文本的逻辑返回可读预测结果
  return pred

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:36:04