LSTM层中某些值的Keras串联

时间:2019-11-13 11:07:00

标签: python keras lstm

我不确定在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。

最好的问候, 丹尼尔

1 个答案:

答案 0 :(得分:0)

所以我没有意识到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)

最好的问候, 丹尼尔