&引用;无法计算输出“;在Tensorflow 2中使用tf.keras合并层时出错

&引用;无法计算输出“;在Tensorflow 2中使用tf.keras合并层时出错,tensorflow,keras,tensorflow2.0,tf.keras,Tensorflow,Keras,Tensorflow2.0,Tf.keras,我试图在tf.keras中使用一个合并层,但是得到的断言错误:无法计算输出张量(“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.l

我试图在tf.keras中使用一个合并层,但是得到的断言错误:无法计算输出张量(“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

由于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)

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

pred = model((a, b))

很好用

谢谢。同意这是可行的,但是如果我使用这种方法,我如何构建一个keras.Model来训练呢?我不能将(a,b)作为
输入传递(我也希望批大小在实践中是可变的)。奇怪的是,没有一种方法可以实现我想要的功能API(我更喜欢这种方法,因为层是在使用它们的地方定义的,不需要命名),但这是一个有效的解决方案,所以我接受了它。谢谢