具有多个输入的 Keras TimeDistributed 层
Keras TimeDistributed layer with multiple inputs
我正在尝试使以下代码行正常工作:
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)
当然,您可能需要修改自定义层的定义并在必要时将输入分开。
我正在尝试使以下代码行正常工作:
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)
当然,您可能需要修改自定义层的定义并在必要时将输入分开。