如何在Keras中使用嵌入()和3D张量?

时间:2017-08-11 11:46:41

标签: python-3.x deep-learning keras lstm word-embedding

我有一个每个20个步骤的股票价格序列表。这是一个2D形状阵列(total_seq,20)。我可以将其重新整形为(total_seq,20,1)以连接其他功能。

我还有每个时间步长10个字的新闻标题。所以我有来自Tokenizer.texts_to_sequences()sequence.pad_sequences()的新闻代币的3D形状阵列(total_seq,20,10)。

我希望将新闻嵌入到股票价格并进行预测。

  

我的想法是新闻嵌入应该返回张量的形状   (total_seq,20,embed_size)这样我就可以将它连接起来了   形状的股票价格(total_seq,20,1)然后将其连接到LSTM图层。

     

要做到这一点,我应该将新闻嵌入形状(total_seq,20,10)转换为   (total_seq,20,10,embed_size)使用Embedding()函数。

     

但是在Keras中,Embedding()函数采用2D张量而不是3D张量。我如何解决这个问题?

假设Embedding()接受3D张量,然后在我得到4D张量作为输出之后,我将通过使用LSTM仅返回最后一个字的嵌入来移除第3维,因此输出形状(total_seq,20,10,embed_size)将被转换为(total_seq,20,embed_size)

  

但是我会再次遇到另一个问题,LSTM接受3D张量而不是4D所以

     

如何使用Embedding和LSTM不接受我的输入?

1 个答案:

答案 0 :(得分:0)

一种解决方法是将所有时间戳和新闻功能放在一起

timesstaps feature = tensor(total_seq, 20)
news_feature = tensor(total_seq, 20, 10)
news_feature_reshaped = reshape(news_feature, (total_seq, 200))
final_features = concat([timestamps_feature, news_fature_reshaped], axis=1)