首页 文章

ValueError:模型的输出张量必须是带有tf.keras Lambda图层的TensorFlow图层的输出

提问于
浏览
0

我正在尝试使用tf.keras.layers.Lambda函数的输出作为tf.keras模型中的最后一层,但是tf将lambda图层的输出解释为Tensor(而不是Layer)对象 .

错误是:“ValueError:模型的输出张量必须是TensorFlow Layer 的输出(因此保持过去的图层元数据) . 发现:Tensor("Discriminator/mullayer/mul:0",shape =(2,2),dtype = float32)”

代码附在下面

from tensorflow.contrib.keras import layers, models

#lots of stuff up here, all working fine...

logits = layers.Dense(1, name=name+'fc')(x)# x works fine

mullayer = layers.Lambda(lambda x: x * self.alphaVal,name = "mullayer")
test = tf.constant([1.0],shape = (2,2))
testOut = mullayer(test)

outputs = [logits, testOut]
self.disc = models.Model(inputs=inp, outputs=outputs)

'self.alphaVal'不是一个keras变量,只是一个浮点数,我怀疑它可能是问题的一部分 . 如果是这样,那么在tf.keras中keras的后端K相当于什么?

谢谢

1 回答

  • 0

    test 不是来自任何被认为是Keras层的地方 .

    如果 test 打算成为模型的输入,则它必须是:

    test = Input(tensor=tf.constant([1.0], shape=(2,2))
    #there may be some implications with shape, batch size and other stuff....
    

    作为具有两个输入的模型,您应该记住在定义 Model 时添加它 .

    如果要在不将其作为输入的情况下使用常量值,则必须 not 将其作为图层的"input"传递 . 您只需从图层内部引用它,或者在图层内创建它 .


    如果您只想测试Lambda图层:

    inp = Input((2,2))
    out = mullayer(inp)
    testModel = Model(inp,out)
    
    testModel.predict(np.ones((1,2,2)))
    

相关问题