pytorch - Pytorch LSTM 与 LSTMCell
问题描述
Pytorch(当前版本 1.1)中的LSTM和LSTMCell有什么区别?LSTMCell 似乎是 LSTM 的一个特例(即只有一层,单向,没有 dropout)。
那么,这两种实现的目的是什么?除非我遗漏了什么,否则将 LSTM 对象用作 LSTMCell 是微不足道的(或者,使用多个 LSTMCell 来创建 LSTM 对象非常容易)
解决方案
是的,您可以一个一个地效仿,将它们分开的原因是效率。
LSTMCell
是一个接受参数的单元格:
- 输入形状批次×输入维度;
- 形状批次 x 隐藏维度的 LSTM 隐藏状态元组。
这是方程的直接实现。
LSTM
是在“for 循环”中应用 LSTM 单元(或多个 LSTM 单元)的层,但该循环使用 cuDNN 进行了大量优化。它的输入是
- 形状为批次 × 输入长度 × 输入维度的输入的三维张量;
- 可选地,LSTM 的初始状态,即形状为 batch × hidden dim 的隐藏状态的元组(如果 LSTM 是双向的,则为此类元组的元组)
您通常可能希望在不同的上下文中使用 LSTM 单元,而不是将其应用于序列,即创建一个在树状结构上运行的 LSTM。当您在序列到序列模型中编写解码器时,您还会在循环中调用单元并在序列结束符号被解码时停止循环。
推荐阅读
- javascript - 阻止带有 chrome 扩展的 url,然后显示自定义页面
- c++ - 模板中的模板方法 - 实例声明和类方法声明签名不同
- c++ - c++ std::vector
架构 x86_64 的未定义符号: - git - 为什么如果我在 Git 中取消设置别名,它仍然有效?
- java - 在Java中将数字列表排序为具有多个小数点的字符串
- sql - 如果我只想要 table2 中不存在于 table1 中的值,我应该使用哪个连接命令
- jenkins - 如何从属性文件中读取和使用节点标签?
- python - 使用列表与字典的数据框
- python - 如何使用 webdriver 将多个页面中的数据保存到单个 csv 中
- ruby-on-rails - Rails:当我只想编辑集合中的一个对象时,如何在集合上使用 fields_for 选择