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
相关产品推荐
相关产品推荐

