LSTMs(Long Short Term Memory networks,长短期记忆网络)简称LSTMs,很多地方用LSTM来指代它。本文也使用LSTM来表示长短期记忆网络。LSTM是一种特殊的RNN网络(循环神经网络)。想要说清楚LSTM,就很有必要先介绍一下RNN。下面我将简略介绍一下RNN原理。

所有循环神经网络都具有神经网络的重复模块链的形式。在标准的RNN中,该重复模块将具有非常简单的结构,比如单个tanh层。标准的RNN网络如下图所示:

LSTM也具有这种链式结构,不过它的重复单元与标准RNN网络里的单元只有一个网络层不同,它的内部有四个网络层。LSTM的结构如下图所示。

在解释LSTM的详细结构时先定义一下图中各个符号的含义,符号包括下面几种,图中黄色类似于CNN里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。

1   LSTM的核心思想

LSTM的核心是细胞状态,用贯穿细胞的水平线表示。

细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。细胞状态如下图所示。

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。

门能够有选择性的决定让哪些信息通过。

而门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示

因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。

一个LSTM里面包含三个门来控制细胞状态。

2   一步一步理解LSTM

前面提到LSTM由三个门来控制细胞状态,这三个门分别称为忘记门、输入门和输出门。下面将分别讲述。

LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。它通过查看和信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态中的哪些信息保留或丢弃多少。

其中0表示不保留,1表示都保留。忘记门如下图所示。

这一步是决定给细胞状态添加哪些新的信息。该步又分为两个步骤,首先,利用和通过一个称为输入门的操作来决定更新哪些信息。然后利用和通过一个tanh层得到新的候选细胞信息,这些信息可能会被更新到细胞信息中。这两步描述如下图所示。

下面将更新旧的细胞信息,变为新的细胞信息。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息的一部分得到新的细胞信息。更新操作如下图所示。

更新完细胞状态后需要根据输入的和来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示。

上面描述的是最普通的LSTM结构。随着研究人员对LSTM的研究,在实际的文章中提出了很多LSTM结构的各种变式,这里就不讨论了。

下面将从代码的角度来看一下LSTM对脑电数据进行分类效果。

数据集来源于BCI Competition II。使用的深度学习框架为Keras。

# 导入工具包
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import SimpleRNN, LSTM, GRU
from keras.optimizers import SGD, Nadam, Adam, RMSprop
from keras.callbacks import TensorBoard
from keras.utils import np_utils
import scipy.io
import numpy as np

第一步:导入数据

data = scipy.io.loadmat('F:\BCI Competition data\BCI Competition II\sp1s_aa_1000Hz.mat')
y_test = np.loadtxt('F:\BCI Competition data\BCI Competition II\labels_data_set_iv.txt',encoding="utf-8")

第二步:预处理数据

"""
将训练数据调整为LSTM的正确输入尺寸
并将数据转换为float 32
"""
x_train = data['x_train'].reshape((316,500,28))
x_train /= 200
x_train = x_train.astype('float32')
"""
将测试数据调整为LSTM的正确输入尺寸
并将数据转换为float 32
"""
x_test = data['x_test'].reshape((100,500,28))
x_test /= 200
x_test = x_test.astype('float32')
"""
将标签数据调整为LSTM的正确输入尺寸
并将数据转换为float 32
"""
y_train = data['y_train'].reshape(316,1)
tmp_train = []
for i in y_train:if i == 1:tmp_train.append(1)elif i == 0:tmp_train.append(-1)
y_train = np.array(tmp_train)
y_train = np_utils.to_categorical(y_train, 2)
y_train = y_train.astype('float32')
y_test = y_test.reshape(100,1)
tmp_test = []
for i in y_test:if i == 1:tmp_test.append(1)elif i == 0:tmp_test.append(-1)
y_test = np.array(tmp_test)
y_test = np_utils.to_categorical(y_test, 2)
y_test = y_test.astype('float32')

第三步:构建训练模型

model = Sequential()
model.add(LSTM(10, return_sequences = True, input_shape=(500, 28)))
model.add(LSTM(10, return_sequences = True))
model.add(LSTM(5))
model.add(Dense(2, activation = 'softmax'))
model.summary()
"""
优化器设置
学习率为0.001
"""
optim = Nadam(lr = 0.001)
# 设置损失函数为交叉熵损失函数
model.compile(loss = 'categorical_crossentropy', optimizer = optim, metrics = ['accuracy'])

第四步:训练模型

"""
epochs设置为10
batch_size设置为20
"""
model.fit(x_train, y_train, epochs=15, batch_size=20)

第五步:计算最后得分和精度

score, acc = model.evaluate(x_test, y_test,batch_size=1)
print('测试得分:', score)
print('测试精度:', acc)

参考

1.https://www.jianshu.com/p/95d5c461924c

2.http://colah.github.io/posts/2015-08-Understanding-LSTMs/

3.https://github.com/kevinchangwang


仅用于学术交流,不用于商业行为,若有侵权及疑问,请后台留言,管理员即时删侵!

更多阅读


乐高小车竟被装上「生物大脑」,无需算法走出蜂巢迷宫!

Python协方差矩阵处理脑电数据

当你在梦乡里,大脑是如何唤醒你的?

中日两高校合作发表仿生手臂驱动技术研究综述

新的脑图可以预测行为

脑电与情绪简介

科学家发现,我们的大脑为音乐进化了一个专门的神经回路

新型脑刺激疗法治疗重度抑郁症

“万能钥匙”可以打开大脑:脑刺激个性化医疗的新领域

基于深度学习的脑电图识别 综述(一)总体概述

EEGNet: 神经网络应用于脑电信号


点个在看祝你开心一整天!

LSTM(长短期记忆网络)原理与在脑电数据上的应用相关推荐

  1. 深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别

    深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别 一.前言 二.网络结构 三.可解释性 四.记忆主线 五.遗忘门 六.输入门 七.输出门 八.手写数字识别实战 8.1 引入依赖库 8. ...

  2. LSTM(长短期记忆网络)原理介绍

    相关学习资料: Pytorch:RNN.LSTM.GRU.Bi-GRU.Bi-LSTM.梯度消失.爆炸 难以置信!LSTM和GRU的解析从未如此清晰 RNN_了不起的赵队-CSDN博客_rnn 如何从 ...

  3. 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据

    文章来源| 脑机接口社区群友 认知计算_茂森的授权分享 在此非常感谢 认知计算_茂森! 本篇文章主要通过思维导图来介绍利用LSTM(长短期记忆网络)来处理脑电数据. 文章的内容来源于社区分享的文章&l ...

  4. 利用LSTM(长短期记忆网络)来处理脑电数据

    目录 LSTM 原理介绍 LSTM的核心思想 一步一步理解LSTM 代码案例 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 Rose小哥今天介绍一下用LS ...

  5. 神经网络学习笔记3——LSTM长短期记忆网络

    目录 1.循环神经网络 1.1循环神经网络大致结构 1.2延时神经网络(Time Delay Neural Network,TDNN) 1.3按时间展开 1.4反向传播 1.5 梯度消失,梯度爆炸 2 ...

  6. Maltab GUI课程设计——LSTM长短期记忆网络回归预测

    文章目录 课程设计 平台:Matlab App designer 功能实现:LSTM长短期记忆网络回归预测 目的: 演示: 欢迎交流 课程设计 平台:Matlab App designer 功能实现: ...

  7. Pytorch LSTM 长短期记忆网络

    Pytorch LSTM 长短期记忆网络 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可 ...

  8. RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

    全文链接:http://tecdat.cn/?p=25133 2017 年年中,R 推出了 Keras 包 _,_这是一个在 Tensorflow 之上运行的综合库,具有 CPU 和 GPU 功能(点 ...

  9. LSTM长短期记忆网络

    长短期记忆网络 – Long short-term memory | LSTM 什么是 LSTM? 长短期记忆网络--通常被称为 LSTM,是一种特殊的 RNN,能够学习长期依赖性.由 Hochrei ...

最新文章

  1. office 2007 验证失败的解决方法
  2. mysql profile 查谒_MYSQL查询优化:profile功能
  3. DevExpress的XtraReport中的Report Bands介绍和使用心得(帮助文档)
  4. 7360清零方法_兄弟、联想、美能达、富士施乐全系列打印机加粉清零方法
  5. linux core无权限,linux – 为什么编辑core_pattern受限制?
  6. 好玩的表情包机器人小程序源码_支持直接搜索仿聊天界面获取源码
  7. 这次是真香了!iPhone 11一个月卖出1200万部 苹果加大产量
  8. python \uxxxx转中文,Python列表中的字典 \uxxxx转中文,
  9. java 累进计费率计算_税点点分享第198期:案例解答个人所得税的计算公式
  10. 20145321 实验三实验报告
  11. shell 字符串包含关系
  12. 植物冠层部分参数的定义及含义解释
  13. 计算机网络实验一:网线制作和局域网组建lab1 report
  14. 无界鼠标MOUSE WITHOUT BORDERS连接失败的一种情况
  15. GB28181公网语音对讲
  16. 15 个有趣的 JS 和 CSS 库
  17. 2022-2028全球英语口语练习平台行业调研及趋势分析报告
  18. 实用帖!推荐一个无版权、免费、高清图片素材网站!
  19. Jmeter入门教程之配置原件(二)
  20. 简书python_第一篇简书-Python入门

热门文章

  1. 华为云服务之计算服务
  2. C语言提取一个数的千位百位十位个位
  3. 微信小程序 手写签名_你竟然还不知道在微信上就可以手写签名、签文件了~
  4. 数字炸弹游戏c语言,数字炸弹游戏作文500字
  5. 苹果手机其他占内存很大去哪删除_手机没内存,照片又不舍得删除?这里有6大方法能帮你解决!...
  6. 请回答数据结构【二叉搜索树】
  7. 我们距离实现通用人工智能还有多远?
  8. mac +xcode 下WebDriverAgent环境配置
  9. 技能分享 | 麦肯锡教给我的写作武器:如何讲好一句话
  10. 人工智能调度如何改变现场服务行业