长短期记忆(Long Short Term Memory)跟上篇的循环神经网络(RNN)之门控循环单元(GRU),两者比较的话,LSTM稍微更复杂一点,但很类似,对整个隐藏单元来讲可以说增加了一个记忆细胞的新概念,这样可以记录更多的额外信息,除了应对RNN中梯度衰减的问题,还能够更好地捕捉时间序列中时间步距离较大的依赖关系。
        长短期记忆顾名思义就是将长期和短期的特征都要捕捉到,在时间序列中,那就是长的时间步的一些有用的信息我要保留下来,短的时间步筛选掉一些无关无用的信息,其中记忆就是类似人的大脑记忆,抽象成记忆细胞进行筛选然后进行输出。

继续画图来看下长短期记忆的计算图:

我们可以看出,在这个单元里面的记忆细胞最后做一个tanh激活(值域在[-1,1]),然后跟输出门按元素乘法,作为最后的输出,这个记忆细胞没有参与到输出层的计算。
遗忘门:控制上一时间步的记忆细胞的信息是否传递到当前时间步
输入门:控制当前时间步的输入,通过候选记忆细胞如何流入当前时间步的记忆细胞
如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。

代码实现:

import d2lzh as d2l
from mxnet import nd
from mxnet.gluon import rnn(corpus_indices,char_to_idx,idx_to_char,vocab_size)=d2l.load_data_jay_lyrics()
num_inputs,num_hiddens,num_outputs=vocab_size,256,vocab_size
ctx=d2l.try_gpu()
#ctx=Nonedef get_params():def _one(shape):return nd.random.normal(scale=0.01,shape=shape,ctx=ctx)def _three():return (_one((num_inputs,num_hiddens)),_one((num_hiddens,num_hiddens)),nd.zeros(num_hiddens,ctx=ctx))W_xi,W_hi,b_i=_three()#输入门参数W_xf,W_hf,b_f=_three()#遗忘门参数W_xo,W_ho,b_o=_three()#输出门参数W_xc,W_hc,b_c=_three()#候选记忆细胞参数#输出层参数W_hq=_one((num_hiddens,num_outputs))b_q=nd.zeros(num_outputs,ctx=ctx)#附上梯度params=[W_xi,W_hi,b_i,W_xf,W_hf,b_f,W_xo,W_ho,b_o,W_xc,W_hc,b_c,W_hq,b_q]for p in params:p.attach_grad()return params#定义模型
#隐藏状态初始化函数,需要返回记忆细胞,比较门控RNN多一个
def init_lstm_state(batch_size,num_hiddens,ctx):return (nd.zeros(shape=(batch_size,num_hiddens),ctx=ctx),nd.zeros(shape=(batch_size,num_hiddens),ctx=ctx))def lstm(inputs,state,params):[W_xi,W_hi,b_i,W_xf,W_hf,b_f,W_xo,W_ho,b_o,W_xc,W_hc,b_c,W_hq,b_q]=params(H,C)=state #上一时间步的隐藏状态和记忆细胞outputs=[]for X in inputs:I=nd.sigmoid(nd.dot(X,W_xi)+nd.dot(H,W_hi)+b_i)F=nd.sigmoid(nd.dot(X,W_xf)+nd.dot(H,W_hf)+b_f)O=nd.sigmoid(nd.dot(X,W_xo)+nd.dot(H,W_ho)+b_o)C_tilda=nd.tanh(nd.dot(X,W_xc)+nd.dot(H,W_hc)+b_c)C=F*C+I*C_tilda#成了当前时间步的记忆细胞H=O*C.tanh()Y=nd.dot(H,W_hq)+b_qoutputs.append(Y)return outputs,(H,C)#训练模型(相邻采样)
num_epochs,num_steps,batch_size,lr,clipping_theta=160,35,32,1e2,1e2-2
pred_period,pred_len,prefixes=40,50,['分开','不分开']
#d2l.train_and_predict_rnn(lstm,get_params,init_lstm_state,num_hiddens,vocab_size,ctx,corpus_indices,idx_to_char,char_to_idx,False,num_epochs,num_steps,lr,clipping_theta,batch_size,pred_period,pred_len,prefixes)#简洁实现
lstm_layer=rnn.LSTM(num_hiddens)
model=d2l.RNNModel(lstm_layer,vocab_size)
d2l.train_and_predict_rnn_gluon(model,num_hiddens,vocab_size,ctx,corpus_indices,idx_to_char,char_to_idx,num_epochs,num_steps,lr,clipping_theta,batch_size,pred_period,pred_len,prefixes)

epoch 40, perplexity 156.775626, time 0.10 sec
 - 分开 我想你的让我 我想你 我不不 我想你的让我 我想你你的让我 我想你你的让我 我想你你的让我 我想你
 - 不分开 我想你的让我 我想你 我不不 我想你的让我 我想你你的让我 我想你你的让我 我想你你的让我 我想你
epoch 80, perplexity 32.347565, time 0.10 sec
 - 分开 我想要这样的让我 想要你这样 我不要再想你 我不要再想你 我不要这样 我不要再想你 我不要这样 我
 - 不分开 你在我遇口你 让我 这样的微笑 你说 却想你的微笑 像思在美不口 让你在我遇多 你爱在美人人 让我
epoch 120, perplexity 4.793431, time 0.10 sec
 - 分开 我想要这样牵着你的手不放开 爱可不可以简简单 没有你在 其实我 别发  爱情的甜蜜 让我开始乡的怒
 - 不分开  没有你烦我有多烦 难道你的手 让我开红乡 你已经离 为过了一个秋 后知后觉 我该好好生活 我该好
epoch 160, perplexity 1.435368, time 0.10 sec
 - 分开 我感轻的生息 随悔着对不起 藤蔓植物 爬满了伯爵的坟墓蛇藏藏无远 看远 有AB血型的公老鼠 恍恍惚
 - 不分开恼  没有你烦我有多烦恼多难熬  穿过云层 我试著努力向你奔跑 爱才送到 你却已在别人怀抱 就是开不
epoch 200, perplexity 1.066441, time 0.10 sec
 - 分开 我想要这样 我想著你 说对去离开嘛妈妈    你的黑色幽默 嘴嘟嘟那可爱的模样 还有在你身上香香的
 - 不分开觉 你已经离开我 不知不觉 我跟了这节奏 后知后觉 后知后觉 迷迷蒙蒙 你给的梦 出现裂缝 隐隐作痛

循环神经网络(RNN)之长短期记忆(LSTM)相关推荐

  1. [人工智能-深度学习-52]:循环神经网络 - RNN的缺陷与LSTM的解决之道

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. 深度学习---循环神经网络RNN详解(LSTM)

    上一节我们详细讲解了RNN的其中一个学习算法即BPTT,这个算法是基于BP的,只是和BP不同的是在反向传播时,BPTT的需要追溯上一个时间的权值更新,如下图,当前时刻是s(t),但是反向传播时,他需要 ...

  3. [Python人工智能] 十二.循环神经网络RNN和LSTM原理详解及TensorFlow编写RNN分类案例

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的 ...

  4. 循环神经网络(RNN)简单介绍及实现(基于表面肌电信号)

    循环神经网络(RNN) 文章目录 循环神经网络(RNN) 一.介绍 二.python实现(LSTM) 三.总结 一.介绍   以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接 ...

  5. 深度学习~循环神经网络RNN, LSTM

    目录 1. 循环神经网络RNN 1.1 RNN出现背景 1.2 RNN概念 2. LSTM 2.1 LSTM出现背景 2.2 LSTM结构 参考 1. 循环神经网络RNN 1.1 RNN出现背景 pr ...

  6. 花书+吴恩达深度学习(十七)序列模型之长短期记忆 LSTM 和门控循环单元 GRU

    目录 0. 前言 1. 长短期记忆 LSTM 2. 门控循环单元 GRU 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十五)序列模型之循环神经网络 ...

  7. 忆阻器交叉开关阵列中的长短期记忆(LSTM)神经网络

    忆阻器交叉开关阵列中的长短期记忆(LSTM)神经网络 原文:Long short-term memory networks in memristor crossbar arrays 作者:CanLi. ...

  8. 循环神经网络(RNN、LSTM、GRU)

    循环神经网络(RNN.LSTM.GRU) 目录 循环神经网络(RNN.LSTM.GRU) 概述: 计算: LSTM(长短记忆模型): GRU:

  9. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

最新文章

  1. 新手java五子棋完整代码判断落子落在线上_Java初学者,编写小游戏五子棋的问题?...
  2. 深入理解TCP/IP协议族
  3. 设置静态ip上网_开始使用第一步:连上网线换个皮
  4. APC UPS报错一例
  5. [渝粤教育] 中国海洋大学 求职OMG 参考 资料
  6. virtualbox配置apache_virtualbox 网络配置 (转)
  7. Quartz学习资料地址记录 、Quartz 学习的博客地址记录
  8. mysql插入10万测试_[原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
  9. 第八届开源操作系统年度技术会议(OS2ATC)在京召开, 百位科技菁英到场共鉴“开源协作”
  10. linux根文件分析,Linux根文件系统详解
  11. 远程连不上mysql_解决MySQL远程连接不上的问题
  12. 自动驾驶之多传感器融合-硬件篇(激光雷达)
  13. 【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)
  14. 【读书笔记-数据挖掘概念与技术】数据预处理
  15. 【电脑小白】提高ppt矢量图导出分辨率
  16. wifi一到晚上服务器无响应,一到晚上九点,网络就开始卡了?主要原因是这三点!...
  17. eq linux_Pr音频效果参考:滤波器与EQ
  18. 高中信息技术计算机网络教案,信息技术 - 第八册计算机教案(全册)-四年级...
  19. R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、绘制分面生存曲线(facet_grid)
  20. Java项目:SSM医院病历信息管理系统

热门文章

  1. 渗透测试工具--Nessue漏洞扫描与分析软件
  2. 淘宝推广方法大全,教你如何做淘宝(转)
  3. [STM32]jlink RTT使用详解
  4. RTT学习笔记7-中断管理
  5. python字符串连接操作-Python字符串拼接
  6. gSOAP 源码分析(四)
  7. 6 款顶级 Android 数据恢复软件列表
  8. OPTICS聚类以及python实现
  9. 计算服务——弹性云服务器
  10. 2022kali安装docker教程