lstm结构图_神经网络——单层LSTM
LSTM神经网络全称长短时记忆神经网络(Long Short-term Memory),是一种特殊的RNN(Recurrent Neural Network)。下面从一下几个部分对LSTM进行介绍。
- LSTM–cell、gate的基本概念
- LSTM内部结构
- 基于Tensorflow的LSTM实现代码解析
- LSTM推断在FPGA实现思路
1. 基本概念
1.1 cell
Cell是构成RNN神经网络的基本单元,Cell能够记忆之前输入的状态。LSTM是RNN的一种变种,解决了RNN在训练过程中梯度爆炸和梯度消失的问题。在LSTM中保持了Cell的概念,但与RNN不同的是,LSTM中Cell记忆的是两种状态:1)记忆之前输入的状态c(Tensorflow中称c-state);2)当前输出状态h(Tensorflow中称m-state)。
LSTM的输入是按照时间序列分步进行输入,在每个时间步(Timestep)cell都进行状态更新。在t时刻,cell的记忆状态
1.2 门
门(Gate)是将LSTM与RNN区分开来的一个重要概念,cell更新状态靠的是门。在cell中,有三个门:遗忘门(Forget Gate),输入门(Input Gate)和输出门(Output Gate)。门的作用是控制数据范围,接下来会围绕下面三个问题对门和cell结构进行解释,1)门的输入数据是什么;2)门的输出数据是什么;3)门控制谁的数据范围。
1)门的输入数据是什么?
门的输入数据是前一个时刻cell的输出
2)门的输出数据是什么?
门的输入数据乘以权值矩阵,然后经过激活函数,即为门的输出,门输出的数据范围与激活函数的类型有关。用函数表示:
3)门控制谁的数据范围?
- 遗忘门:之前的状态
会对当前cell输出有影响,遗忘门的作用是对之前的状态进行部分遗忘。(过去不开心的事情该忘记的就忘记吧==)
- 输入门:对当前cell的输入的数据进行控制。(选择性吸收?)
- 输出门:对当前cell的输出的数据进行控制。(谁还不能留点小秘密..)
2. LSTM结构
LSTM是由cell构成,而cell则是由gate构成。下面来看看gate是怎么构成cell的吧!
- forget gate:
- input gate :
- new cell :
- output gate:
前一个时刻cell的输出和当前时刻序列的输入拼接作为各个门的输入,拼接后乘以不同权值矩阵(加上偏置)可以得到不同的门:遗忘门、输入门和输出门。上一时刻cell的记忆状态与遗忘门做element-wise(对应元素相乘),表示遗忘之前时刻的部分信息;输入门与new cell做element-wise,表示加入当前时刻的部分信息;经过遗忘和加入新的记忆,得到cell新的记忆状态。最后与输出门做element-wise,将cell部分信息作为cell的输出。
3. 代码实现
github上有比较好的基于tensorflow实现lstm的例子,对其中部分代码做一些说明和拓展。
lstmgithub.com
lstm_cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
1) n_hidden: 表示Cell中h的维度
2) lstm_cell.weights[0]: 获取lstm内部权值, 按照i,j,f,o顺序
3) lstm_cell.weights[1]: 获取偏置outputs, states = tf.contrib.rnn.static_rnn(lstm_cell, x, dtype=tf.float32,sequence_length=seqlen)
1) outputs: 每个timestep输出一组outputs, 分别表示每个时间步Cell的输出h
2) states: 分为s-state和m-state, 分别表示最后一个时间步Cell的c和h第一步解析:
1. c = np.array(10*[0])
2. x1 = np.array(test_data[0,0])
3. h1 = np.array(10*[0])
4. xh1 = np.append(x1,h1,axis=0)
5. concat = np.dot(xh1,lstm_kernel) + lstm_bias
6. i, j, f, o = np.split(concat,4)
7. new_c = (c*sigmoid(f + 1.0) + sigmoid(i)*mytanh(j))
8. new_h = (mytanh(new_c)*sigmoid(o))第一步解析说明:
1-3:Cell初始状态输入
4:[x,h]
5-6:计算隔各个门,得到i,j,f,o(j是new cell)
7-8:Cell更新c,h
4. FPGA实现
加速计算一般是加速推断部分,而训练是在CPU/GPU中进行。将各个权值数据范围弄清楚,设计各个模块就比较简单了。这里记录一下主要模块,在FPGA中实现推断部分需要的计算模块:矩阵计算、存储控制、cell结构。
- 矩阵计算:在乘法器资源充足的条件下,可以采用并行方式计算,先计算向量相乘再累加,然后进行模块例化,实现矩阵计算。
- Cell结构:实现单个cell逻辑,激活函数采用分段非线性逼近,激活函数的处理对最终精度有很大影响。
- 存储控制:控制矩阵计算和cell运算的数据流。
需要注意的点:
- 在仿真时需要弄清权值的数据范围,以及各个输入、输出和中间变量的数据范围,对进行数据定点化处理,确定数据位宽。
- 为了降低延时,可以将数据处理速率提升至数据输入速率的n倍(需要计算每次运算需要多少个时钟)。
lstm结构图_神经网络——单层LSTM相关推荐
- lstm处理时序数据结构图_详解LSTM
Recurrent Neural Networks (RNN) 在使用深度学习处理时序问题时,RNN是最常使用的模型之一.RNN之所以在时序数据上有着优异的表现是因为RNN在 时间片时会将 时间片的隐 ...
- 循环神经网络_漫谈循环神经网络:LSTM、GRU
知乎视频www.zhihu.com 简单循环神经网络的局限性 循环神经网络横向结构也是借助激活函数进行传递的: 上图是循环神经网络按时间步展开,而如果一次处理的时间步过长,即从左到右的层数很深,那么 ...
- lstm结构图_LSTM模型结构的可视化
目录: 1.传统的BP网络和CNN网络 2.LSTM网络 3.LSTM的输入结构 4.pytorch中的LSTM 4.1 pytorch中定义的LSTM模型 4.2 喂给LSTM的数据格式 4.3 L ...
- 基于双向 lstm 和残差神经网络的 rna 二级结构预测方法
目录 结果 结论 背景 结果 学习结果和演示 预测结果和比较 讨论 结论 材料和方法 数据收集和处理 摘要 背景: 研究表明,rna 二级结构是由配对碱基构成的平面结构,在基本生命活动和复杂疾病中发挥 ...
- lstm结构图_ON-LSTM:能表示语言层次的LSTM
序列模型不完美,拥有层次才更佳 LSTM作为序列模型一直是自然语言处理的最佳选择之一,即使transformer出现了也依然无法撼动LSTM在NLP界的江湖地位. 然而,语言虽然看起来是一个序列,实际 ...
- python3语音识别模块_语音识别(LSTM+CTC)
序言:语音识别作为人工智能领域重要研究方向,近几年发展迅猛,其中RNN的贡献尤为突出.RNN设计的目的就是让神经网络可以处理序列化的数据.本文笔者将陪同小伙伴们一块儿踏上语音识别之梦幻旅途,相信此处风 ...
- bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras
一.问题背景 现实生活中,在一系列时间点上观测数据是司空见惯的活动,在农业.商业.气象军事和医疗等研究领域都包含大量的时间序列数据.时间序列的预测指的是基于序列的历史数据,以及可能对结果产生影 ...
- tensor flow lstm 图像 一条直线_深入理解LSTM
LSTM Author:louwill From:深度学习笔记 原始结构的RNN还不够处理较为复杂的序列建模问题,它存在较为严重的梯度消失问题,最直观的现象就是随着网络层数增加,网络会逐渐变得无法训练 ...
- 循环神经网络之LSTM、GRU
循环神经网络之LSTM.GRU 1. 什么是 LSTM? LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题 ...
最新文章
- 世界上根本没有正确的选择
- codeforces gym-101741 Subsequence Sum Queries 分治+离线
- Java并发编程实战————售票问题
- zabbix java api
- python小工具自动审单录凭证_跟着老板工作了二十年,最近来了个新员工然后我被开除了...
- 铁路从未授权任何第三方平台售票服务,各大旅游网站哪来的接口?
- jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
- 关于RecyclerView(一)基本使用
- 加了2个皮肤的art dialog
- Java写的一个二叉树三种遍历递归算法(仅用作理解三种遍历)
- 有学问,还是牛逼啊!
- 陈纪修老师《数学分析》 第08章:反常积分 笔记
- 基于Java毕业设计移动电商网站源码+系统+mysql+lw文档+部署软件
- 电气元件知识大全:实物图、作用、型号分类、工作原理、符号都有
- 使用FlashPaper在线转换.doc为.swf
- 洛阳九县八取名字_洛阳市地图(洛阳市九县六区地图)
- 使用mysql管理系统建表时,字段中有PK,NN,UQ,BIN,UN,ZF,AI基本字段类型标识的意义
- 寻找两个正序数组的中位数
- 修改改EXCEL页眉页脚
- pixhawk 学习笔记
热门文章
- 用神经网络分类陀螺和遥远星体
- php 自定义文件后缀,自定义更改服务器asp/php/.net等文件后缀名
- bsc是指什么_掌握BSC,实现企业数字化管理
- 2021/6/18~19 每天学习python 30分钟 -了解python - python的基本变量概述
- 4、C语言面试笔试--内存操作-指针
- 功率增长步长(powerRampingStep)
- ubuntu10.10各种服务器搭建
- 【PC工具】N个直播录屏相关软件,手机投屏电脑,电脑显示手机摄像头图像,必须好用无广告!...
- AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
- 简单算法题:leetcode-2 	两数相加