【重新定义matlab强大系列十七】Matlab深入浅出长短期记忆神经网络LSTM

🔗 运行环境:Matlab

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

#### 防伪水印——左手の明天 ####

💗 大家好🤗🤗🤗,我是左手の明天!好久不见💗

💗今天更新系列——重新定义matlab强大系列💗

📆  最近更新:2024 年 03 月 09 日,左手の明天的第 316 篇原创博客

📚 更新于专栏:matlab

#### 防伪水印——左手の明天 ####


 本文主要说明如何使用长短期记忆 (LSTM) 神经网络处理分类和回归任务的序列和时间序列数据。有关如何使用 LSTM 神经网络对序列数据进行分类的示例,请参阅:

【深度学习】详解利用Matlab和Python中 LSTM 网络实现序列分类

【Python深度学习】详解Python深度学习进行时间序列预测

【Python机器学习】详解Python机器学习进行时间序列预测

【Matlab深度学习】详解matlab深度学习进行时间序列预测


一、LSTM 神经网络架构

LSTM 神经网络是一种循环神经网络 (RNN),可以学习序列数据的时间步之间的长期依存关系。LSTM 神经网络的核心组件是序列输入层和 LSTM 层。序列输入层将序列或时间序列数据输入神经网络中。LSTM 层学习序列数据的时间步之间的长期相关性。

下图说明用于分类的简单 LSTM 网络的架构。该神经网络从一个序列输入层开始,后跟一个 LSTM 层。为了预测类标签,该神经网络的末尾是一个全连接层、一个 softmax 层和一个分类输出层。

下图说明用于回归的简单 LSTM 神经网络的架构。该神经网络从一个序列输入层开始,后跟一个 LSTM 层。该神经网络的末尾是一个全连接层和一个回归输出层。

下图说明用于视频分类的神经网络的架构。要将图像序列输入到神经网络,请使用序列输入层。要使用卷积层来提取特征,也就是说,要将卷积运算独立地应用于视频的每帧,请使用一个序列折叠层,后跟一个卷积层,然后是一个序列展开层。要使用 LSTM 层从向量序列中学习,请使用一个扁平化层,后跟 LSTM 层和输出层。


二、LSTM 层架构

以下是数据流通过 LSTM 层的示意图,其中输入为 x、输出为 y、时间步数为 T。在图中,ht 表示在时间步 t 的输出(也称为隐藏状态),ct 表示在该时间步的单元状态

如果层输出完整序列,则它输出 y1、…、yT,等效于 h1、…、hT。如果该层仅输出最后一个时间步,则该层输出 yT,等效于 hT。输出中的通道数量与 LSTM 层的隐藏单元数量匹配。

第一个 LSTM 运算使用 RNN 的初始状态和序列的第一个时间步来计算第一个输出和更新后的单元状态。在时间步 t 上,该运算使用 RNN 的当前状态 (ct−1,ht−1) 和序列的下一个时间步来计算输出和更新后的单元状态 ct。

该层的状态由隐藏状态(也称为输出状态)和单元状态组成。时间步 t 处的隐藏状态包含该时间步的 LSTM 层的输出。单元状态包含从前面的时间步中获得的信息。在每个时间步,该层都会在单元状态中添加或删除信息。该层使用不同的控制这些更新。

以下组件控制层的单元状态和隐藏状态。

组件目的
输入门 (i)控制单元状态更新的级别
遗忘门 (f)控制单元状态重置(遗忘)的级别
候选单元 (g)向单元状态添加信息
输出门 (o)控制添加到隐藏状态的单元状态的级别

下图说明在时间步 t 上的数据流。此图显示门如何遗忘、更新和输出单元状态和隐藏状态。

LSTM 层的可学习权重包括输入权重 W (InputWeights)、循环权重 R (RecurrentWeights) 以及偏置 b (Bias)。矩阵 W、R 和 b 分别是输入权重、循环权重和每个分量的偏置的串联。该层根据以下方程串联矩阵:

其中 i、f、g、o 分别表示输入门、遗忘门、候选单元和输出门。

时间步 t 处的单元状态由下式给出:

其中 ⊙ 表示哈达玛乘积(向量的按元素乘法)。

时间步 t 处的隐藏状态由下式给出:

其中 σc 表示状态激活函数。默认情况下,lstmLayer 函数使用双曲正切函数 (tanh) 计算状态激活函数。

以下公式说明时间步 t 处的组件。

这些计算中,σg 表示门激活函数。默认情况下,lstmLayer 函数使用 

给出的 sigmoid 函数来计算门激活函数。


三、LSTM网络种类

3.1 分类 LSTM 网络

要创建针对“序列到标签”分类的 LSTM 网络,请创建一个层数组,其中包含一个序列输入层、一个 LSTM 层、一个全连接层、一个 softmax 层和一个分类输出层。

将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为类的数量。您不需要指定序列长度。

对于 LSTM 层,指定隐含单元的数量和输出模式 'last'

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,'OutputMode','last')fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer];

要针对“序列到序列”分类创建一个 LSTM 网络,请使用与“序列到标签”分类相同的架构,但将 LSTM 层的输出模式设置为 'sequence'

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,'OutputMode','sequence')fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer];

3.2 回归 LSTM 网络

要针对“序列到单个”回归创建一个 LSTM 网络,请创建一个层数组,其中包含一个序列输入层、一个 LSTM 层、一个全连接层和一个回归输出层。

将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为响应的数量。不需要指定序列长度。

对于 LSTM 层,指定隐含单元的数量和输出模式 'last'

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,'OutputMode','last')fullyConnectedLayer(numResponses)regressionLayer];

要针对“序列到序列”回归创建一个 LSTM 网络,请使用与“序列到单个”回归相同的架构,但将 LSTM 层的输出模式设置为 'sequence'

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,'OutputMode','sequence')fullyConnectedLayer(numResponses)regressionLayer];

3.3 视频分类网络

要针对包含图像序列的数据(如视频数据和医学图像)创建一个深度学习网络,请使用序列输入层指定图像序列输入。

要使用卷积层来提取特征,也就是说,要将卷积运算独立地应用于视频的每帧,请使用一个序列折叠层,后跟一个卷积层,然后是一个序列展开层。要使用 LSTM 层从向量序列中学习,请使用一个扁平化层,后跟 LSTM 层和输出层。

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;layers = [ ...sequenceInputLayer(inputSize,'Name','input')sequenceFoldingLayer('Name','fold')convolution2dLayer(filterSize,numFilters,'Name','conv')batchNormalizationLayer('Name','bn')reluLayer('Name','relu')sequenceUnfoldingLayer('Name','unfold')flattenLayer('Name','flatten')lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')fullyConnectedLayer(numClasses, 'Name','fc')softmaxLayer('Name','softmax')classificationLayer('Name','classification')];

将这些层转换为一个层图,并将序列折叠层的 miniBatchSize 输出连接到序列展开层的对应输入。

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

3.4 更深的 LSTM 网络

可以通过在 LSTM 层之前插入具有输出模式 'sequence' 的额外 LSTM 层来加大 LSTM 网络的深度。为了防止过拟合,可以在 LSTM 层后插入丢弃层。

对于“序列到标签”分类网络,最后一个 LSTM 层的输出模式必须为 'last'

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1,'OutputMode','sequence')dropoutLayer(0.2)lstmLayer(numHiddenUnits2,'OutputMode','last')dropoutLayer(0.2)fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer];

对于“序列到序列”分类网络,最后一个 LSTM 层的输出模式必须为 'sequence'

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1,'OutputMode','sequence')dropoutLayer(0.2)lstmLayer(numHiddenUnits2,'OutputMode','sequence')dropoutLayer(0.2)fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer];

四、网络层

描述
sequenceInputLayer序列输入层向神经网络输入序列数据并应用数据归一化。

lstmLayer

LSTM 层是一个 RNN 层,该层学习时间序列和序列数据中时间步之间的长期相关性。

bilstmLayer

双向 LSTM (BiLSTM) 层是一个 RNN 层,该层学习时间序列或序列数据的时间步之间的双向长期相关性。当您希望 RNN 在每个时间步从完整时间序列中学习时,这些相关性会很有用。
gruLayerGRU 层是一个 RNN 层,它学习时间序列和序列数据中时间步之间的相关性。
convolution1dLayer一维卷积层将滑动卷积滤波器应用于一维输入。
maxPooling1dLayer一维最大池化层通过将输入划分为一维池化区域并计算每个区域的最大值来执行下采样。
averagePooling1dLayer一维平均池化层通过将输入划分为若干一维池化区域,然后计算每个区域的平均值来执行下采样。
globalMaxPooling1dLayer一维全局最大池化层通过输出输入的时间或空间维度的最大值来执行下采样。
sequenceFoldingLayer序列折叠层将一批图像序列转换为一批图像。使用序列折叠层独立地对图像序列的时间步执行卷积运算。
sequenceUnfoldingLayer序列展开层在序列折叠后还原输入数据的序列结构。
flattenLayer扁平化层将输入的空间维度折叠成通道维度。

wordEmbeddingLayer(Text Analytics Toolbox)

单词嵌入层将单词索引映射到向量。

五、序列处理

5.1 按长度对序列排序

要在填充或截断序列时减少填充或丢弃的数据量,请尝试按序列长度对数据进行排序。要按序列长度对数据进行排序,首先使用 cellfun 对每个序列应用 size(X,2) 来获得每个序列的列数。然后使用 sort 对序列长度进行排序,并使用第二个输出对原始序列重新排序。

sequenceLengths = cellfun(@(X) size(X,2), XTrain);
[sequenceLengthsSorted,idx] = sort(sequenceLengths);
XTrain = XTrain(idx);

5.2 填充序列

如果指定序列长度 'longest',则软件会填充序列,使小批量中的所有序列具有与小批量中的最长序列相同的长度。此选项是默认选项。

5.3 截断序列

如果指定序列长度 'shortest',则软件会截断序列,使小批量中的所有序列具有与该小批量中的最短序列相同的长度。序列中的其余数据被丢弃。

5.4 拆分序列

如果将序列长度设置为整数值,则软件会将小批量中的所有序列填充到小批量中最长序列的长度。然后,软件将每个序列拆分为指定长度的较小序列。如果发生拆分,则软件会创建额外的小批量。如果指定的序列长度没有均分数据的序列长度,则对于包含这些序列的最终时间步的小批量,其长度短于指定的序列长度。

如果将序列长度指定为正整数,则软件会在连续的迭代中处理较小的序列。神经网络会在拆分的序列之间更新 RNN 状态。


六、解决长期依赖问题的常用架构

除了LSTM(长短期记忆)之外,还有其他神经网络架构也可以用于解决长期依赖问题。以下是一些常见的架构:

  • 门控循环单元(GRU):GRU是一种类似于LSTM的循环神经网络架构,旨在解决长期依赖问题。它通过门控机制来控制信息的流动,使得模型能够选择性地保留或遗忘之前时间步的信息。GRU比LSTM有更简单的结构,因此训练速度更快,且参数更少,有助于减少过拟合的风险。
  • 循环递归神经网络(RRNN):RRNN是另一种解决长期依赖问题的神经网络架构。它通过递归连接的方式,使得神经网络能够捕获序列数据中的长期依赖关系。RRNN的递归连接使得每个时间步的输出都依赖于前一个时间步的输出,从而能够处理长期依赖问题。

这些架构在处理长期依赖问题时表现出色,并且在许多应用中取得了显著的成功,如语音识别、机器翻译、图像识别等。选择合适的架构取决于任务的具体需求和数据的特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272610.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPP VIIRS卫星数据介绍及获取

VIIRS(Visible infrared Imaging Radiometer)可见光红外成像辐射仪。扫描式成像辐射仪,可收集陆地、大气、冰层和海洋在可见光和红外波段的辐射图像。它是高分辨率辐射仪AVHRR和地球观测系列中分辨率成像光谱仪MODIS系列的拓展和改进。VIIRS数…

java 数据结构二叉树

目录 树 树的概念 树的表示形式 二叉树 两种特殊的二叉树 二叉树的性质 二叉树的存储 二叉树的基本操作 二叉树的遍历 二叉树的基本操作 二叉树oj题 树 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次…

vs创建asp.net core webapi发布到ISS服务器

打开服务器创建test123文件夹,并设置共享。 ISS配置信息: 邮件网站,添加网站 webapi asp.net core发布到ISS服务器网页无法打开解决方法 点击ISS Express测试,可以成功打开网页。 点击生成,发布到服务器 找到服务器IP…

OJ_复数集合

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <queue> #include <string> using namespace std;struct Complex {int re;int im;//构造函数Complex(int _re, int _im) {//注意参数名字必须不同re _re;im _im;} };//结构体不支…

新闻文章分类项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 新闻文章分类模型比较项目报告 项目介绍 背景 新闻文章自动分类是自然语言处理和文本挖掘领域的一个重要任务。正确分类新闻文章不仅能帮助用…

日期问题---算法精讲

前言 今天讲讲日期问题&#xff0c;所谓日期问题&#xff0c;在蓝桥杯中出现众多&#xff0c;但是解法比较固定。 一般有判断日期合法性&#xff0c;判断是否闰年&#xff0c;判断日期的特殊形式&#xff08;回文或abababab型等&#xff09; 目录 例题 题2 题三 总结 …

问题:前端获取long型数值精度丢失,后面几位都为0

文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样&#xff0c;仔细看 data 的第17位之后 分析 该字段类型是long类型问题&#xff1a;前端接收到数据后&#xff0c;发现精度丢失&#xff0c;当返回的结果超过17位的时候&#xff0c;后面的全…

[java入门到精通] 11 泛型,数据结构,List,Set

今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型&#xff0c;里面所有用到泛型的地…

【C++】函数重载

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;函数重载的定义 &#x1f4cc;函数重载的三种类型 &#x1f38f;参数个数不同 &#x1f38f;参数类型不同 &#x1f38f;参数类型顺序不同 &#x1f4cc;重载…

用C语言执行SQLite3的gcc编译细节

错误信息&#xff1a; /tmp/cc3joSwp.o: In function main: execSqlite.c:(.text0x100): undefined reference to sqlite3_open execSqlite.c:(.text0x16c): undefined reference to sqlite3_exec execSqlite.c:(.text0x174): undefined reference to sqlite3_close execSqlit…

❤ Vue3项目搭建系统篇(二)

❤ Vue3项目搭建系统篇&#xff08;二&#xff09; 1、安装和配置 Element Plus&#xff08;完整导入&#xff09; yarn add element-plus --savemain.ts中引入&#xff1a; // 引入组件 import ElementPlus from element-plus import element-plus/dist/index.css const ap…

STL之deque容器代码详解

1 基础概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作。 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 deque相对而言&#xff0c;对头部的插入删除速度回比vector快。 vector访问…

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: &#x1f9d9;‍♂️ ImageMagick 7 1. windows程序 链接&#xff1a;https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码&#xff1a;hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

SSD的原理

简介 SSD&#xff08;Solid State Drive&#xff09;是一种使用闪存存储芯片&#xff08;NAND Flash&#xff09;的存储设备。与传统的机械硬盘不同&#xff0c;SSD没有移动部件&#xff0c;因此具有更快的读写速度和更低的能耗。 架构 NAND Flash是一种非易失性存储器&…

nodejs web服务器 -- 搭建开发环境

一、配置目录结构 1、使用npm生成package.json&#xff0c;我创建了一个nodejs_network 文件夹&#xff0c;cd到这个文件夹下&#xff0c;执行&#xff1a; npm init -y 其中-y的含义是yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;如此就生成了默认的pac…

008-slot插槽

slot插槽 1、插槽 slot 的简单使用2、插槽分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&…

cannot import name ‘Flask‘ from partially initialized module ‘flask‘

bug&#xff1a; ImportError: cannot import name Flask from partially initialized module flask (most likely due to a circular import) (G:\pythonProject6\flask.py) 这个是因为包的名字和文件的名字一样 修改文件名&#xff1a; 结果 &#x1f923;&#x1f923;&…

nginx配置支持ipv6访问,ipv4改造ipv6

一、前言 本地测试nginx部署的web系统支持ipv6地址访问。 二、本机ipv6地址 cmd ipconfig 找到IPv6地址 其中带有%号其实是临时分配得到地址 我们可以ping一下看看 另一种ping的方式 加上中括号 还有就是去掉%号 三、nginx增加配置 server块里增加 listen [::]:80; 四、测…

arcgis 栅格数据处理2——栅格转地级市(栅格转矢量图)

1. 获取空间分析权限&#xff08;解决无法执行所选工具问题&#xff09; 选中“自定义”中的“扩展模块” 在弹出的模块中选中能选的模块&#xff0c;此处需要选择“spatial analysis”以进行下一步分析 3. 将栅格数据转为整数型&#xff08;解决无法矢量化&#xff09; 选…

【Python+Selenium学习系列5】Selenium特殊元素定位之-鼠标悬停操作

前言 Selenium模拟用户在浏览器中的操作&#xff0c;比如点击按钮。在某些场景下&#xff0c;我们需要模拟鼠标悬停的操作&#xff0c;来触发一些隐藏的元素。本文将介绍Python Selenium实现鼠标悬停操作。 鼠标悬停&#xff0c;即当光标与其名称表示的元素重叠时触发的事件&…