Keras TimeDistributed层具有多个输入

时间:2018-10-24 10:01:16

标签: python machine-learning keras deep-learning keras-layer

我正在尝试使以下代码行起作用:

low_encoder_out = TimeDistributed( AutoregressiveDecoder(...) )([X_tf, embeddings])

AutoregressiveDecoder是一个接受两个输入的自定义层。 经过一番谷歌搜索后,问题似乎出在TimeDistributed包装器不接受多个输入的情况下。有些解决方案建议将两个输入合并后再将其输入到图层,但是由于它们的形状是

X_tf.shape: (?, 16, 16, 128, 5)
embeddings.shape: (?, 16, 1024)

我真的不知道如何合并它们。有没有一种方法可以使TimeDistributed层与多个输入一起工作?或者,是否可以通过一种很好的方式合并两个输入?

1 个答案:

答案 0 :(得分:1)

正如您提到的TimeDistributed层不支持多个输入。考虑到所有输入的时间步数(即第二轴)必须相同的事实,这是一个(不是很好)的解决方法,是将所有输入重塑为(None, n_timsteps, n_featsN),将它们连接起来,然后进给它们作为TimeDistributed层的输入:

X_tf_r = Reshape((n_timesteps, -1))(X_tf)
embeddings_r = Reshape((n_timesteps, -1))(embeddings)

concat = concatenate([X_tf_r, embeddings_r])
low_encoder_out = TimeDistributed(AutoregressiveDecoder(...))(concat)

当然,您可能需要修改自定义层的定义,并在必要时将输入分开。