gpt4 book ai didi

python - Tensorflow - 值错误 : Output tensors to a Model must be the output of a TensorFlow `Layer`

转载 作者:太空狗 更新时间:2023-10-30 02:51:25 25 4
gpt4 key购买 nike

我在 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 中,但它似乎对我不起作用。

最佳答案

问题不在于 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)

或者,您可以使用 Lambda 层代替子类化:

x = tf.keras.layers.Lambda(lambda t: tf.unstack(t, axis=2, num=256))(sum_input)

关于python - Tensorflow - 值错误 : Output tensors to a Model must be the output of a TensorFlow `Layer` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55908329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com