【问题标题】:Keras TimeDistributed layer with multiple inputs具有多个输入的 Keras TimeDistributed 层
【发布时间】:2019-03-28 16:51:40
【问题描述】:

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

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

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

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

我真的不知道如何合并它们。有没有办法让TimeDistributed 层处理多个输入?或者,有什么办法可以很好地合并两个输入?

【问题讨论】:

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


    【解决方案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)
    

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

    【讨论】:

    • 感谢您的回答。我希望避免这种解决方法,但它似乎是使它工作的唯一方法...... TimeDistributed 层不支持多个输入非常奇怪,这对我来说似乎是一个很常见的用例......跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多