输入到 LSTM 网络 tensorflow

Input to LSTM network tensorflow

我有一个长度为 t (x0, ...,xt) 的时间序列,其中每个 xi 都是一个 d 维向量,即 xi=(x0i, x1i, ...., xdi)。因此我的输入 X 的形状是 [batch_size, d]

tensorflow LSTM 的输入大小应为 [batchSize,hidden_size]。 我的问题是我应该如何将我的时间序列输入到 LSTM 中。我想到的一种可能的解决方案是使用大小为 [d,hidden_size] 的附加权重矩阵 W,并使用 X*W + B 输入 LSTM。

这是正确的还是我应该向网络输入其他内容?

谢谢

你的直觉是正确的;您需要的(以及您所描述的)是一个嵌入,用于将您的输入向量转换为 LSTM 输入的维度。我知道实现该目标的三种主要方法。

  • 您可以按照您的描述使用额外的权重矩阵 W 和偏差向量 b 手动执行此操作。
  • 您可以使用 linear() 函数 from TensorFlow's rnn_cell.py library. Then pass the output of that linear layer as the input of your LSTM when you create your LSTM via the rnn_decoder() function in Tensorflow's seq2seq.py library 或其他方式自动创建权重矩阵和偏差向量。
  • 或者您可以让 Tensorflow 创建此嵌入并将其自动连接到 LSTM 的输入,方法是通过同一 seq2seq 库第 141 行的 embedding_rnn_decoder() 函数创建 LSTM。 (如果你在没有任何可选参数的情况下跟踪这个函数的代码,你会发现它只是为输入和 LSTM 创建一个线性嵌入层并将它们连接在一起。)

除非您出于某种原因需要访问您正在创建的各个组件,否则我建议您使用第三个选项来保持您的代码处于较高水平。