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

TensorFlow Transformer模型批量预测输入格式错误排查求助

Transformer批量预测的正确输入格式

为啥你之前的写法报错?

你传[input_in, input_in, input_in]的时候,input_in本身是包含2个张量的列表,这么写相当于把3个单样本的输入全拆成了6个独立张量——但你的模型本来就只需要2个输入(每个输入对应一个分支的批量数据),自然会报“期望2个输入,实际收到6个”的错误。

正确的输入构造方法

假设单样本的两个输入张量分别是tensor1(形状(1,150))和tensor2(形状(1,150)),批量预测时要分别给每个输入分支做批量堆叠:

  • 把所有样本的tensor1堆在一起,形成形状(X,1,150)的张量(X是你要预测的样本数)
  • 把所有样本的tensor2堆在一起,同样形成(X,1,150)的张量
  • 最后把这两个批量张量组成列表,传给predict()就行

代码示例

# 拿3个重复的单样本举例
# 先拆分单样本的两个输入
single_tensor1, single_tensor2 = input_in[0], input_in[1]

# 堆叠多个样本的同一分支输入
batch_tensor1 = tf.stack([single_tensor1, single_tensor1, single_tensor1])  # 形状(3,1,150)
batch_tensor2 = tf.stack([single_tensor2, single_tensor2, single_tensor2])  # 形状(3,1,150)

# 执行批量预测
results = transformer.predict([batch_tensor1, batch_tensor2])

更简洁的写法(重复单样本批量)

如果是用同一个单样本生成批量,也可以用tf.tile()快速复制:

# 对单样本张量做批量复制,这里生成3个样本的批量
batch_tensor1 = tf.tile(single_tensor1, [3, 1])  # 形状(3,150),如果要保留(3,1,150)可以加维度:tf.tile(tf.expand_dims(single_tensor1, 0), [3,1,1])
batch_tensor2 = tf.tile(single_tensor2, [3, 1])

results = transformer.predict([batch_tensor1, batch_tensor2])

核心要点

  • 你的模型输入是2个独立张量,每个张量的第一维是批量大小,后面的维度和单样本对应输入一致
  • 绝对不能把多个单样本的输入列表直接拼在一起,否则会把每个单样本的两个输入拆成独立元素,导致输入数量不符合模型要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:54:22