16

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

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

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

谢谢

4

1 回答 1

16

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

  • 如您所述,您可以使用额外的权重矩阵W和偏置向量手动执行此操作b
  • 您可以使用TensorFlow 的 rnn_cell.py 库linear()中的函数自动创建权重矩阵和偏置向量。然后,当您通过Tensorflow 的 seq2seq.py 库中的函数或其他方式创建 LSTM 时,将该线性层的输出作为 LSTM 的输入传递。rnn_decoder()
  • embedding_rnn_decoder()或者,您可以通过同一 seq2seq 库的第 141 行的函数创建 LSTM,让 Tensorflow 创建此嵌入并将其自动连接到 LSTM 的输入。(如果您在没有任何可选参数的情况下跟踪此函数的代码,您会发现它只是为输入以及 LSTM 创建一个线性嵌入层并将它们连接在一起。)

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

于 2016-02-02T20:37:32.920 回答