我已经在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中,但是它似乎不适用于我。
答案 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)