Tensorflow-ValueError:模型的输出张量必须是TensorFlow`Layer`的输出

时间:2019-04-29 17:36:26

标签: python tensorflow keras

我已经在TensorFlow 2.0中使用Keras功能API创建了一个RNN,以下代码可以在其中运行

sum_input = keras.Input(shape=(UNIT_SIZE, 256,), name='sum')
x         = tf.unstack(sum_input,axis=2, num=256)
t_sum     = x[0]
for i in range(len(x) - 1):
    t_sum = keras.layers.Add()([t_sum, x[i+1]])
sum_m     = keras.Model(inputs=sum_input, outputs=t_sum, name='sum_model')

然后我不得不更改为Tensorflow 1.13,这给了我以下错误

ValueError: Output tensors to a Model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: Tensor("add_254/add:0", shape=(?, 40), dtype=float32)

我不明白为什么输出张量不是来自Tensorflow层,因为t_sum是来自keras.layers.Add的输出。

我已尝试按照ValueError: Output tensors to a Model must be the output of a TensorFlow Layer 中的建议将部分代码包装到keras.layers.Lambda中,但是它似乎不适用于我。

1 个答案:

答案 0 :(得分:3)

问题不是Add()层而是tf.unstack()层-它不是keras.layers.Layer()的实例。您可以将其包装为自定义图层:

import tensorflow as tf

class Unstack(tf.keras.layers.Layer):
    def __init__(self):
        super(Unstack, self).__init__()
    def call(self, inputs, num=256):
        return tf.unstack(inputs, axis=2, num=num)

x = Unstack()(sum_input)