在处理时序数据,已经有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神经网络相关推荐

  1. python程序写诗_pytorch下使用LSTM神经网络写诗实例

    在pytorch下,以数万首唐诗为素材,训练双层LSTM神经网络,使其能够以唐诗的方式写诗. 代码结构分为四部分,分别为 1.model.py,定义了双层LSTM模型 2.data.py,定义了从网上 ...

  2. 中文版三把刀!学习Python、PyTorch、神经网络三本书!(附免费下载)

    近年来,人工智能技术逐渐变得普及.越来越多的人开始关注:深度学习. 而提起深度学习,又难以绕开 Python,PyTorch 和 神经网络 .今天推荐三本书,是学习Python,PyTorch和神经网 ...

  3. (转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)

    干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译  参与:老红.李亚洲 就像雨季后非洲大草原许多野 ...

  4. PyTorch LSTM,batch_first=True对初始化h0和c0的影响

    PyTorch LSTM,batch_first=True对初始化h0和c0的影响 batch_first=True会对LSTM的输入输出的维度顺序有影响,但是对初始化h0和c0的维度顺序没有影响,也 ...

  5. 数据分享 | LSTM神经网络架构和原理及其在Python中的预测应用(附视频)

    本文约2800字,建议阅读10+分钟 本文与你分享如何使用长短期记忆网络(LSTM)来拟合一个不稳定的时间序列. 长短期记忆网络--通常称为"LSTM"--是一种特殊的RNN递归神 ...

  6. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)

    [深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...

  7. 【深度学习】LSTM神经网络解决COVID-19预测问题(一)

    [深度学习]LSTM神经网络解决COVID-19预测问题 文章目录 1 概述 2 数据分析 3 SIR模型和LSTM网络的对比 4 LSTM神经网络的建立 5 参考 1 概述 我们将SIR传播模型和L ...

  8. 【深度学习】基于Torch的Python开源机器学习库PyTorch卷积神经网络

    [深度学习]基于Torch的Python开源机器学习库PyTorch卷积神经网络 文章目录 1 CNN概述 2 PyTorch实现步骤2.1 加载数据2.2 CNN模型2.3 训练2.4 可视化训练 ...

  9. LSTM神经网络 和 GRU神经网络

    LSTM是什么 LSTM即Long Short Memory Network,长短时记忆网络.它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的. 我们说RNN不能处 ...

  10. 图解LSTM神经网络架构及其11种变体(附论文)

    来源:机器之心 英文原文:Deep learning architecture diagrams 参与:老红.李亚洲 原文链接:图解LSTM神经网络架构及其11种变体(附论文) 本文经机器之心(微信公 ...

最新文章

  1. asp.net mvc view中支持多个实体强类型小技巧
  2. HTML基础部分(1)字体,照片,链接
  3. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
  4. 从VS2008+QT4到VS2015+QT5迁移过程中遇到的问题及解决方法
  5. Awesome-XJTLU 项目宣传
  6. mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验
  7. 数据装载器连接其他oracle数据库_07
  8. 在 GitHub 上提交代码必备指南!
  9. Cerebro 插件之电影磁力搜索神器
  10. Selenium WebDriver架构
  11. android开发之自定义AutoCompleteTextView
  12. 提交任务photoshop的脚本端
  13. 迅捷CAD格式转换器专业版
  14. html图片轮播幻灯片,JS+css3实现幻灯片轮播图
  15. WPF扫雷游戏(简略版)
  16. Linux命令之dhclient,dhclient命令 – 动态获取或释放IP地址
  17. 2048游戏(C语言)
  18. 只读存储器和随机存储器有什么区别?
  19. 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
  20. 计算机的搜索功能无法启用,电脑文件搜索功能无法使用的具体解决方法

热门文章

  1. SpringBoot笔记
  2. Android系统终端命令大全
  3. 查看计算机数字证书,数字证书认不到怎么办?
  4. 驱动开发:实现驱动加载卸载工具
  5. [3]、Swagger——解决前后端打架问题
  6. python游戏自动化实战--游戏辅助软件冰山后的秘密
  7. pb利用pdf虚拟打印机将datawindow中的内容导出为pdf
  8. WAP PUSH 技术的一些说明
  9. 花生壳域名解析更新代码(C#),不想安装花生壳客户端的可以用这个
  10. 细说php在哪买,细说PHP