【pytorch】LSTM神经网络
在处理时序数据,已经有RNN循环神经网络和GRU神经网络两个比较经典的网络。当然还有一种LSTM神经网络,长短期记忆神经网络。
从发展历史来看,是现有LSTM再有GRU的,但是从复杂度来看,LSTM比GRU更加复杂。
先来回忆一下GRU,其有两个门(更新门和重置门),有一个记录历史信息的向量HtH_tHt。
而LSTM就更加复杂了,无论是在门的数量上还是记录历史信息的向量上。
LSTM神经网络
其一共有3个门,2个状态。
控制门
遗忘门
这个与GRU中的重置门非常类似,含义也是大致相同。
Ft=Θ(Xt⋅Wxf+Ht−1⋅Whf+bf)F_t = \Theta\left(X_t\cdot W_{xf} + H_{t - 1}\cdot W_{hf} + b_f\right) Ft=Θ(Xt⋅Wxf+Ht−1⋅Whf+bf)
而后,FtF_tFt作用于记忆Ct−1C_{t-1}Ct−1,遗忘部分历史信息。
输入门
它与GRU中的更新门有点类似,但是却不完全一样。
因为LSTM有两个状态,它可以理解为CtC_tCt的更新门。
It=Θ(Xt⋅Wxi+Ht−1⋅Whi+bi)I_t = \Theta\left(X_t\cdot W_{xi} + H_{t - 1}\cdot W_{hi} + b_i\right) It=Θ(Xt⋅Wxi+Ht−1⋅Whi+bi)
其后会作用于候选记忆Ct′C'_tCt′,更新得出新的CtC_tCt。
输出门
它与GRU中的更新门有点类似,但是却不完全一样。
因为LSTM有两个状态,它可以理解为HtH_tHt的更新门。
Ot=Θ(Xt⋅Wxo+Ht−1⋅Who+bo)O_t = \Theta\left(X_t\cdot W_{xo} + H_{t - 1}\cdot W_{ho} + b_o\right) Ot=Θ(Xt⋅Wxo+Ht−1⋅Who+bo)
其后会作用于候选记忆CtC_tCt,更新得出新的HtH_tHt。
状态
记忆状态
从整个更新过程可以看到,Ct−1C_{t-1}Ct−1先遗忘部分信息,再与候选记忆(根据XtX_tXt)生成出的部分信息合并,得到CtC_tCt。
其的变化是较为缓慢的,也被成为长期记忆。
隐状态
HtH_tHt根据目前的输出(XtX_tXt与Ht−1H_{t-1}Ht−1的结果)与当前记忆CtC_tCt作用的结果。相比于CtC_tCt,HtH_tHt与Ht−1H_{t-1}Ht−1关系更弱,因此HtH_tHt变化更加的快。因此也被称为短期记忆。
结合上述两个状态:长期记忆与短期记忆,其就被称为长短期记忆神经网络。
代码实现
pytorch也提供了对于的LSTM层,可以十分方便的调用。
但是需要自己定义创始状态值(一个二元组)。
class LSMT_Net(nn.Module):def __init__(self, vocab_size, hidden_size, **kwargs):super(LSMT_Net, self).__init__(**kwargs)self.vocab_size = vocab_sizeself.hidden_size = hidden_sizeself.LSMTlayer = nn.LSTM(vocab_size , hidden_size, num_layers= 2)self.L1 = nn.Linear(hidden_size , vocab_size)def forward(self, inputs, state):X = F.one_hot(inputs.T.long(), self.vocab_size) # 转变成一个只有一个1,其余都是0的向量X = X.to(torch.float32) Y , state = self.LSMTlayer(X , state)Y = Y.reshape((-1 , Y.shape[-1]))Y = self.L1(Y)return Y , statedef begin_state(self , batch_size):return (torch.zeros(self.LSMTlayer.num_layers , batch_size , self.hidden_size),torch.zeros(self.LSMTlayer.num_layers , batch_size , self.hidden_size))
【pytorch】LSTM神经网络相关推荐
- python程序写诗_pytorch下使用LSTM神经网络写诗实例
在pytorch下,以数万首唐诗为素材,训练双层LSTM神经网络,使其能够以唐诗的方式写诗. 代码结构分为四部分,分别为 1.model.py,定义了双层LSTM模型 2.data.py,定义了从网上 ...
- 中文版三把刀!学习Python、PyTorch、神经网络三本书!(附免费下载)
近年来,人工智能技术逐渐变得普及.越来越多的人开始关注:深度学习. 而提起深度学习,又难以绕开 Python,PyTorch 和 神经网络 .今天推荐三本书,是学习Python,PyTorch和神经网 ...
- (转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)
干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译 参与:老红.李亚洲 就像雨季后非洲大草原许多野 ...
- PyTorch LSTM,batch_first=True对初始化h0和c0的影响
PyTorch LSTM,batch_first=True对初始化h0和c0的影响 batch_first=True会对LSTM的输入输出的维度顺序有影响,但是对初始化h0和c0的维度顺序没有影响,也 ...
- 数据分享 | LSTM神经网络架构和原理及其在Python中的预测应用(附视频)
本文约2800字,建议阅读10+分钟 本文与你分享如何使用长短期记忆网络(LSTM)来拟合一个不稳定的时间序列. 长短期记忆网络--通常称为"LSTM"--是一种特殊的RNN递归神 ...
- 【深度学习】LSTM神经网络解决COVID-19预测问题(二)
[深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...
- 【深度学习】LSTM神经网络解决COVID-19预测问题(一)
[深度学习]LSTM神经网络解决COVID-19预测问题 文章目录 1 概述 2 数据分析 3 SIR模型和LSTM网络的对比 4 LSTM神经网络的建立 5 参考 1 概述 我们将SIR传播模型和L ...
- 【深度学习】基于Torch的Python开源机器学习库PyTorch卷积神经网络
[深度学习]基于Torch的Python开源机器学习库PyTorch卷积神经网络 文章目录 1 CNN概述 2 PyTorch实现步骤2.1 加载数据2.2 CNN模型2.3 训练2.4 可视化训练 ...
- LSTM神经网络 和 GRU神经网络
LSTM是什么 LSTM即Long Short Memory Network,长短时记忆网络.它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的. 我们说RNN不能处 ...
- 图解LSTM神经网络架构及其11种变体(附论文)
来源:机器之心 英文原文:Deep learning architecture diagrams 参与:老红.李亚洲 原文链接:图解LSTM神经网络架构及其11种变体(附论文) 本文经机器之心(微信公 ...
最新文章
- asp.net mvc view中支持多个实体强类型小技巧
- HTML基础部分(1)字体,照片,链接
- 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
- 从VS2008+QT4到VS2015+QT5迁移过程中遇到的问题及解决方法
- Awesome-XJTLU 项目宣传
- mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验
- 数据装载器连接其他oracle数据库_07
- 在 GitHub 上提交代码必备指南!
- Cerebro 插件之电影磁力搜索神器
- Selenium WebDriver架构
- android开发之自定义AutoCompleteTextView
- 提交任务photoshop的脚本端
- 迅捷CAD格式转换器专业版
- html图片轮播幻灯片,JS+css3实现幻灯片轮播图
- WPF扫雷游戏(简略版)
- Linux命令之dhclient,dhclient命令 – 动态获取或释放IP地址
- 2048游戏(C语言)
- 只读存储器和随机存储器有什么区别?
- 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
- 计算机的搜索功能无法启用,电脑文件搜索功能无法使用的具体解决方法