python - Tensorflow - ValueError:模型的输出张量必须是TensorFlow`Layer`的输出
问题描述
我在 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()
layer 而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)
推荐阅读
- javascript - 使用 RXJS 取消嵌套订阅
- c# - 使用 c# unity解码 GStreamer jpeg 流
- loops - 未定义的函数 A 有什么问题?(口齿不清)
- sql - 将 GROUP BY 结果存储在 Oracle PL/SQL 中的变量中
- javascript - 如何为每个表行循环相同的功能?
- javascript - scrollTop 按钮仅在第一次单击时起作用
- angular - 我们应该在某些 NgRx Effects 案例中使用 NEVER 吗?
- python - 如何计算要在 BitBake 中填充的文件大小?
- python - 何用 python-docx 读取单个表格单元格使用的列数(colspan)
- c - 如何垂直打印数据?