目录

  • 一、前言
  • 二、符号约定
  • 三、LSTM的参数
  • 四、LSTM的输入
  • 五、LSTM的输出
  • 最后

一、前言

本文将结合官方文档并以seq2seq模型为例全面展示在多层num_layers >= 2双向bidirectional = True)LSTM中输入输出的形状变化以及如何正确使用它们。

以下均假定 batch_first = False,即默认值。

二、符号约定

符号 描述
LLL 序列长度(时间步数)
NNN batch_size
ddd 词向量的维度,即 embed_size
hhh LSTM隐藏层神经元的个数
nnn num_layers

三、LSTM的参数

LSTM最常用的参数列在下方:

nn.LSTM(input_size,hidden_size,num_layers=1,dropout=0,bidirectional=False,
)

除了前两个参数为必需参数以外,后面三个都是可选参数。其中 input_size 是输入层神经元的个数,hidden_size 是隐藏层神经元的个数。

需要注意的是,对于有 nnn 个层的LSTM来说,除了第一个层的 input_sizehidden_size 可能不同以外,后面 n−1n-1n1 个层的 input_sizehidden_size 都相同,均为第一个层的 hidden_size

四、LSTM的输入

LSTM的输入共有三个:inputh_0c_0。为便于理解,我们先来回顾一下seq2seq编码器的工作流程。

在seq2seq模型中,假设我们的编码器采用的就是多层双向的LSTM。对于NMT任务,一般来讲,我们需要根据语料库构建一个词表,该词表不重复地包含了语料库中的所有词元(一般是单词),并根据每个词元的出现频率为其分配唯一的索引(特殊词元一般位于词表的最上方,剩余的词元出现频率越高,索引越小,出现频率过低的词元会被丢弃并视为未知词元)。之后,我们会选定一个序列长度 LLL,并对语料库中的每个句子进行填充或截断(否则无法批量加载)。

在批量读取数据时,数据形状通常为 (N,L)(N,L)(N,L)(即每次读取 NNN 个句子,每个句子的长度为 LLL),并且其中的每个元素都是原先词元在词表中的索引。将这批数据丢进embedding层后其形状变为 (N,L,d)(N,L,d)(N,L,d)(本质是一个根据索引查表的过程)。为了符合 batch_first = False,我们需要用 permute 方法将 (N,L,d)(N,L,d)(N,L,d) 变为 (L,N,d)(L,N,d)(L,N,d),而这个 (L,N,d)(L,N,d)(L,N,d) 形状的张量正是LSTM的 input。所以对于编码器而言nn.LSTMinput_size 就是 ddd

因为通常来讲 c_0 的形状和 h_0 的一样,所以接下来我们只介绍 h_0(后续的 h_nc_n 同理)。

顾名思义,h_0 就是LSTM的初始隐状态。对于 nnn 层单向LSTM,我们需要为每一个层都提供初始的隐状态,那么此时 h_0 的形状为 (n,N,h)(n,N,h)(n,N,h)。对于双向的情形,我们自然需要两个形状为 (n,N,h)(n,N,h)(n,N,h) 的张量,PyTorch的做法是将这两个张量concat在一起成为一个 (2n,N,h)(2n,N,h)(2n,N,h) 的张量作为 nnn 层双向LSTM的初始隐状态(至于怎么concat后面会提到)。

深入剖析多层双向LSTM的输入输出相关推荐

  1. LSTM模型、双向LSTM模型以及模型输入输出的理解

    循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息.然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限.这个问题就使得隐含 ...

  2. 基于Pytorch实现LSTM(多层LSTM,双向LSTM)进行文本分类

    LSTM原理请看这:点击进入 LSTM: nn.LSTM(input_size, hidden_size, num_layers=1, nonlinearity=tanh, bias=True, ba ...

  3. RNN结构,双向LSTM,Transformer, BERT对比分析

    最近接到一些秋招面试,发现自己对于好多网络结构都模糊了,刚好最近在调研模型,就趁这个机会把之前的常见模型知识梳理一下. 主要参考文档: https://jalammar.github.io/illus ...

  4. 深度学习实战(2)用Pytorch搭建双向LSTM

    用Pytorch搭建双向LSTM 应最近的课程实验要求,要做LSTM和GRU的实验效果对比.LSTM的使用和GRU十分相似,欢迎参考我的另外一篇介绍搭建双向GRU的Blog:https://blog. ...

  5. 使用深度双向LSTM模型构造社区问答系统

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 关于社区问答系统的问题背景,我们在之前的"利用卷积神经网络构造社区问答系统"一文里 ...

  6. TensorFlow搭建双向LSTM实现时间序列预测(负荷预测)

    目录 I. 前言 II. 原理 III. 模型定义 IV. 训练和预测 V. 源码及数据 I. 前言 前面几篇文章中介绍的都是单向LSTM,这篇文章讲一下双向LSTM. 系列文章: 深入理解PyTor ...

  7. 双向LSTM 对航空乘客预测

    前言 1.LSTM 航空乘客预测 单步预测和多步预测. 简单运用LSTM 模型进行预测分析. 2.加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测. 3 ...

  8. 基于双向LSTM和迁移学习的seq2seq核心实体识别

    http://spaces.ac.cn/archives/3942/ 暑假期间做了一下百度和西安交大联合举办的核心实体识别竞赛,最终的结果还不错,遂记录一下.模型的效果不是最好的,但是胜在" ...

  9. 双向LSTM在时间序列异常值检测的应用

    双向LSTM在时间序列异常值检测的应用 参考文章: (1)双向LSTM在时间序列异常值检测的应用 (2)https://www.cnblogs.com/zakured1/p/10287304.html ...

最新文章

  1. MySQL 性能调优的10个方法
  2. 数据结构--选择排序
  3. Mysql(3)——mysql数据类型
  4. javaEE 飞机大战
  5. HDU2039 三角形【水题】
  6. SSIS包的组建之连接管理器
  7. oracle rman异地备份,rman异地备份与恢复测试
  8. 微信小程序·实现列表页和详情页同步收藏
  9. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,[转载]职称计算机考试网络基础答案(1)...
  10. 苹果系统更新不了怎么办_iphone/ipad更新系统失败后怎么办?
  11. APM-Skywalking调研及实施报告
  12. js将数组对象中属性值相同的对象合并成一个children
  13. 在windows中桌面显示itunes音乐滚动歌词
  14. 中国移动 烽火HG6543C5光猫 获取超级密码教程
  15. 第八章 磁盘存储器的管理
  16. Vi文本编辑器的使用方法
  17. VSCODE(三)用户界面
  18. java如何连接rfid_Java + Uno + RFID:java中的调用方法读取rfid
  19. fMRI数据处理_预处理_1_流程及脚本
  20. 如何用示波器测量串口

热门文章

  1. python jupyter输出结果_在Jupyter上学习python(U.1)
  2. 传送网、传输网和承载网的区别
  3. Apollo PNC课程学习(Ⅰ)
  4. 生命礼赞,带动世界第三次文化复兴——三问篇
  5. socket套接字 通信原理
  6. Python开发常用IDE有哪些
  7. vertx源码_使用Vertx构建微服务
  8. Kubernetes是解药还是毒药?
  9. 单张人像生成视频!中国团队提出最新3D人脸视频生成模型,实现SOTA
  10. window server2016服务器激活方法(简单快速,亲测可用)