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

TensorFlow Keras Lambda层多输入加法器调用predict报IndexError问题咨询

问题根因

你定义的Keras输入层Input((1), name="Input1")要求输入张量的形状为(批量大小, 1),而你传入的scaler1、scaler2是0维标量张量,形状为(),不存在第0维的批量轴,触发了数据适配器读取样本数量时的索引错误。

解决方案

方案1:调整输入张量形状,匹配现有输入层要求

给标量张量增加批量轴和特征轴,调整为符合输入层要求的(1,1)形状:

# 方法1:用tf.expand_dims加轴
scaler1 = tf.expand_dims(tf.expand_dims(tf.convert_to_tensor(21.1), axis=0), axis=-1)
scaler2 = tf.expand_dims(tf.expand_dims(tf.convert_to_tensor(12.0), axis=0), axis=-1)

# 方法2:直接用tf.reshape指定形状
scaler1 = tf.reshape(tf.convert_to_tensor(21.1), (1,1))
scaler2 = tf.reshape(tf.convert_to_tensor(12.0), (1,1))

调用predict即可得到正确结果:

print(modelAdder.predict([scaler1, scaler2]))
# 输出:[[33.1]]

方案2:调整输入层定义,适配标量输入

如果你的业务场景需要传入标量,修改输入层的形状参数为(),仅保留批量轴:

inpAdder1 = keras.layers.Input((), name="Input1")
inpAdder2 = keras.layers.Input((), name="Input2")
doAdd = keras.layers.Lambda(lambda x: adder(x[0],x[1]),name="LambdaLayer")([inpAdder1,inpAdder2])
modelAdder = keras.Model([inpAdder1,inpAdder2],doAdd)

此时给标量增加批量轴调整为(1,)形状即可正常运行:

scaler1 = tf.expand_dims(tf.convert_to_tensor(21.1), axis=0)
scaler2 = tf.expand_dims(tf.convert_to_tensor(12.0), axis=0)
print(modelAdder.predict([scaler1, scaler2]))
# 输出:[33.1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:15:04