在Tensorflow 2中使用tf.keras合并图层出现“无法计算输出”错误

时间:2019-08-09 17:02:11

标签: tensorflow keras tensorflow2.0 tf.keras

我正在尝试在tf.keras中使用合并层,但得到AssertionError: Could not compute output Tensor("concatenate_3/Identity:0", shape=(None, 10, 8), dtype=float32)。最小(无效)示例:

import tensorflow as tf
import numpy as np

context_length = 10 

input_a = tf.keras.layers.Input((context_length, 4))
input_b = tf.keras.layers.Input((context_length, 4))

#output = tf.keras.layers.concatenate([input_a, input_b]) # same error
output = tf.keras.layers.Concatenate()([input_a, input_b])

model = tf.keras.Model(inputs = (input_a, input_b), outputs = output)

a = np.random.rand(3, context_length, 4).astype(np.float32)
b = np.random.rand(3, context_length, 4).astype(np.float32)

pred = model(a, b)

我在其他合并层(例如add)中遇到相同的错误。我在TF2.0.0-alpha0上,但在colab上与2.0.0-beta1相同。

2 个答案:

答案 0 :(得分:2)

由于tf.keras.layers.Input而失败。 Tensorflow无法验证图层的形状,因此会失败。这将起作用:

class MyModel(tf.keras.Model):

    def __init__(self):
        super(MyModel, self).__init__()
        self.concat = tf.keras.layers.Concatenate()
        # You can also add the other layers
        self.dense_1 = tf.keras.layers.Dense(10)

    def call(self, a, b):
        out_concat = self.concat([a, b])
        out_dense = self.dense_1(out_concat)

model = MyModel()

a = np.random.rand(3, 5, 4).astype(np.float32)
b = np.random.rand(3, 5, 4).astype(np.float32)

output = model(a, b)

答案 1 :(得分:0)

好的,错误消息没有帮助,但是我最终偶然发现了解决方案:model的输入需要张量的迭代,即

pred = model((a, b))

工作正常。