LSTM 网络张量流的输入

Posted

技术标签:

【中文标题】LSTM 网络张量流的输入【英文标题】:Input to LSTM network tensorflow 【发布时间】:2016-05-05 13:24:04 【问题描述】:

我有一个长度为 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。

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

谢谢

【问题讨论】:

在讨论 X 时,您提到了 batch_size,但对于 LSTM,您提到了 batchSize。这些是一样的吗? 【参考方案1】:

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

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

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

【讨论】:

第三种解决方案在这种情况下真的有效吗?您可以将 embedding_rnn_decoder() 用于稀疏但多维的输入张量吗?看起来该函数将查找给定一维整数或单热编码的嵌入,但不是一种仅使用权重矩阵更改输入向量维度的方法。 什么是最先进的方法或推荐的方法是什么?谢谢!

以上是关于LSTM 网络张量流的输入的主要内容,如果未能解决你的问题,请参考以下文章

输入张量和隐藏张量不在同一个设备上,发现输入张量在 cuda:0 和隐藏张量在 cpu

如何在张量流中创建独立的 LSTM 单元?

如何修复'ValueError:输入张量必须具有等级 4'?

pytorch-torch2:张量计算和连接

pytorch中LSTM各参数理解

如何在张量流的自定义损失中获取张量的形状