深入剖析多层双向LSTM的输入输出
目录
- 一、前言
- 二、符号约定
- 三、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_size
和 hidden_size
可能不同以外,后面 n−1n-1n−1 个层的 input_size
和 hidden_size
都相同,均为第一个层的 hidden_size
。
四、LSTM的输入
LSTM的输入共有三个:input
、h_0
和 c_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.LSTM
的 input_size
就是 ddd。
因为通常来讲 c_0
的形状和 h_0
的一样,所以接下来我们只介绍 h_0
(后续的 h_n
和 c_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的输入输出相关推荐
- LSTM模型、双向LSTM模型以及模型输入输出的理解
循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息.然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限.这个问题就使得隐含 ...
- 基于Pytorch实现LSTM(多层LSTM,双向LSTM)进行文本分类
LSTM原理请看这:点击进入 LSTM: nn.LSTM(input_size, hidden_size, num_layers=1, nonlinearity=tanh, bias=True, ba ...
- RNN结构,双向LSTM,Transformer, BERT对比分析
最近接到一些秋招面试,发现自己对于好多网络结构都模糊了,刚好最近在调研模型,就趁这个机会把之前的常见模型知识梳理一下. 主要参考文档: https://jalammar.github.io/illus ...
- 深度学习实战(2)用Pytorch搭建双向LSTM
用Pytorch搭建双向LSTM 应最近的课程实验要求,要做LSTM和GRU的实验效果对比.LSTM的使用和GRU十分相似,欢迎参考我的另外一篇介绍搭建双向GRU的Blog:https://blog. ...
- 使用深度双向LSTM模型构造社区问答系统
/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 关于社区问答系统的问题背景,我们在之前的"利用卷积神经网络构造社区问答系统"一文里 ...
- TensorFlow搭建双向LSTM实现时间序列预测(负荷预测)
目录 I. 前言 II. 原理 III. 模型定义 IV. 训练和预测 V. 源码及数据 I. 前言 前面几篇文章中介绍的都是单向LSTM,这篇文章讲一下双向LSTM. 系列文章: 深入理解PyTor ...
- 双向LSTM 对航空乘客预测
前言 1.LSTM 航空乘客预测 单步预测和多步预测. 简单运用LSTM 模型进行预测分析. 2.加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测. 3 ...
- 基于双向LSTM和迁移学习的seq2seq核心实体识别
http://spaces.ac.cn/archives/3942/ 暑假期间做了一下百度和西安交大联合举办的核心实体识别竞赛,最终的结果还不错,遂记录一下.模型的效果不是最好的,但是胜在" ...
- 双向LSTM在时间序列异常值检测的应用
双向LSTM在时间序列异常值检测的应用 参考文章: (1)双向LSTM在时间序列异常值检测的应用 (2)https://www.cnblogs.com/zakured1/p/10287304.html ...
最新文章
- MySQL 性能调优的10个方法
- 数据结构--选择排序
- Mysql(3)——mysql数据类型
- javaEE 飞机大战
- HDU2039 三角形【水题】
- SSIS包的组建之连接管理器
- oracle rman异地备份,rman异地备份与恢复测试
- 微信小程序·实现列表页和详情页同步收藏
- 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,[转载]职称计算机考试网络基础答案(1)...
- 苹果系统更新不了怎么办_iphone/ipad更新系统失败后怎么办?
- APM-Skywalking调研及实施报告
- js将数组对象中属性值相同的对象合并成一个children
- 在windows中桌面显示itunes音乐滚动歌词
- 中国移动 烽火HG6543C5光猫 获取超级密码教程
- 第八章 磁盘存储器的管理
- Vi文本编辑器的使用方法
- VSCODE(三)用户界面
- java如何连接rfid_Java + Uno + RFID:java中的调用方法读取rfid
- fMRI数据处理_预处理_1_流程及脚本
- 如何用示波器测量串口
热门文章