我在尝试让以下代码行正常工作:
low_encoder_out = TimeDistributed( AutoregressiveDecoder(...) )([X_tf, embeddings])
其中AutoregressiveDecoder
是一个接受两个输入的自定义层。经过一番搜索后,问题似乎在于TimeDistributed
包装器不接受多个输入。有些解决方案建议在输入层之前合并这两个输入,但由于它们的形状是
X_tf.shape: (?, 16, 16, 128, 5)embeddings.shape: (?, 16, 1024)
我实在不知道如何合并它们。有没有办法让TimeDistributed
层能够处理多个输入?或者,另一种方式,是否有任何方法可以以一种优雅的方式合并这两个输入?
回答:
正如你提到的,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)
当然,你可能需要修改你的自定义层的定义,并在必要时将输入重新分离。