【问题标题】:Keras concatenation of certain values from LSTM layers来自 LSTM 层的某些值的 Keras 连接
【发布时间】:2020-03-09 04:07:45
【问题描述】:

我不确定这在 Keras 中是否可行,但我想知道是否有任何方法可以连接来自 LSTM 层的特定值。 我想使用 LSTM 编码整个序列,但预测只使用特定的列。 例如:

  • 我正在使用两个大小为 5 的输入序列(所以我的输入形状是一个输入是 (None, 5) 和 (None, 5)。
  • 然后我嵌入序列,我的输入形状是 (None, 5, 300) 和 (None, 5, 300)
  • 然后我使用具有 200 个 LSTM 单元的 LSTM 层对序列进行编码,我的最终形状是 (None, 5, 200) 和 (None, 5, 200)。

现在我不想连接整个序列,而是连接 lstm_1 中编码的最后 4 个单词和 lstm_2 中的第一个单词。

> input_1 = Input(shape=(5, ))
> emb_1 = Embedding(..., 300, ...)(input_1)
> lstm_1 = CuDNNLSTM(200, ...)(emb_1)
> 
> input_2 = Input(shape=(5, ))
> emb_2 = Embedding(..., 300, ...)(input_2)
> lstm_2 = CuDNNLSTM(200, ...)(emb_2)
> 
> # here is the problem
> emb = concatenate([lstm_1[??], lstm_2[??])
> 
> d1 = Dense(...)(emb)
> out = Dense(..., activation="softmax")(d1)

不确定我是否有任何意义,但我想知道是否可以使用 Keras 功能 API。

最好的问候, 丹尼尔

【问题讨论】:

    标签: python keras lstm


    【解决方案1】:

    所以我没有意识到 lstm_1 和 lstm_2 实际上是我可以连接的 Numpy 数组。所以解决方案很简单,你只需要将它包裹在 Lambda 层中即可。

    lstm_1_lambda = Lambda(lambda x: x[:, -4:, :])(lstm_1)
    lstm_2_lambda = Lambda(lambda x: x[:, :1, :])(lstm_2)
    emb = concatenate([lstm_1_lambda, lstm_1_lambda)
    

    最好的问候, 丹尼尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2019-04-15
      • 2019-01-15
      • 1970-01-01
      • 2019-03-12
      相关资源
      最近更新 更多