Pytorch LSTM 与 LSTMCell

dkv*_*dkv 17 lstm recurrent-neural-network pytorch lstm-stateful

Pytorch(目前是1.1版)中的LSTMLSTMCell有什么区别?看起来 LSTMCell 是 LSTM 的一个特例(即只有一层,单向,没有 dropout)。

那么,拥有这两种实现的目的是什么?除非我遗漏了什么,否则将 LSTM 对象用作 LSTMCell 是微不足道的(或者,使用多个 LSTMCell 来创建 LSTM 对象非常容易)

Jin*_*ich 25

是的,你可以互相模仿,将它们分开的原因是效率。

LSTMCell 是一个接受参数的单元格:

  • 形状批次输入×输入维度;
  • 形状批次 x 隐藏维度的 LSTM 隐藏状态元组。

这是方程的直接实现。

LSTM是在“for 循环”中应用 LSTM 单元(或多个 LSTM 单元)的层,但该循环使用 cuDNN 进行了大量优化。它的输入是

  • 形状批次×输入长度×输入维度的输入的三维张量;
  • 可选地,LSTM 的初始状态,即形状 batch × hidden dim 的隐藏状态元组(如果 LSTM 是双向的,则为此类元组的元组)

您通常可能希望在不同的上下文中使用 LSTM 单元而不是将其应用于序列,即制作一个在树状结构上运行的 LSTM。当您在序列到序列模型中编写解码器时,您还会在循环中调用单元格并在序列结束符号被解码时停止循环。

  • 您的回答成功帮助我理解了如何实现这篇论文:https://arxiv.org/pdf/1607.00148.pdf。我在理解解码器部分时遇到了困难,但现在我知道使用单个单元,我可以做到这一点。谢谢。 (2认同)