输入到 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 创建一个线性嵌入层并将它们连接在一起。)
除非您出于某种原因需要访问您正在创建的各个组件,否则我建议您使用第三个选项来保持您的代码处于较高水平。
我有一个长度为 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 thernn_decoder()
function in Tensorflow's seq2seq.py library 或其他方式自动创建权重矩阵和偏差向量。 - 或者您可以让 Tensorflow 创建此嵌入并将其自动连接到 LSTM 的输入,方法是通过同一 seq2seq 库第 141 行的
embedding_rnn_decoder()
函数创建 LSTM。 (如果你在没有任何可选参数的情况下跟踪这个函数的代码,你会发现它只是为输入和 LSTM 创建一个线性嵌入层并将它们连接在一起。)
除非您出于某种原因需要访问您正在创建的各个组件,否则我建议您使用第三个选项来保持您的代码处于较高水平。