首页 > 其他分享 >Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测

时间:2022-11-09 12:32:43浏览次数:45  
标签:预测 步长 时间 Matlab 序列 LSTM 输入 RNN

此示例说明如何使用长短期记忆 (​​LSTM​​) 网络预测时间序列。

相关视频: 

LSTM​​神经网络​​架构和原理及其在Python中的预测应用

LSTM 网络是一种循环神经网络 (​​RNN​​),它通过循环时间步长和更新网络状态来处理输入数据。网络状态包含在所有先前时间步长中记住的信息。您可以使用 LSTM 网络使用先前的时间步长作为输入来预测时间序列或序列的后续值。要训​​练 LSTM 网络进行时间序列预测,请训练具有序列输出的回归 LSTM 网络,其中响应(目标)是训练序列,其值偏移了一个时间步长。换句话说,在输入序列的每个时间步,LSTM 网络学习预测下一个时间步的值。

有两种预测方法:开环预测和闭环预测。

  • 开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。
  • 闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。

此图显示了一个示例序列,其中包含使用闭环预测的预测值。

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_数据

此示例使用波形数据集,其中包含 2000 个具有三个通道的不同长度的综合生成波形。该示例训练 LSTM 网络以使用闭环和开环预测在给定先前时间步长的值的情况下预测波形的未来值。

加载数据

查看前几个序列的大小。

data(1:5)

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_数据_02

查看声道数量。为了训练网络,每个序列必须具有相同数量的声道。

nufdmChahgnnhels = 3

可视化图中的前几个序列。


1.   
2. for i = 1:4
3. nexttsdile
4. staasdcgafdgkedplot(dadgta{i}')

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_时间序列_03

将数据划分为训练集和测试集。将 90% 的观察结果用于训练,其余用于测试。

准备训练数据

要预测序列的未来时间步长的值,请将目标指定为训练序列,其值移动一个时间步长。换句话说,在输入序列的每个时间步,LSTM 网络学习预测下一个时间步的值。预测变量是没有最终时间步长的训练序列。


1.  for n = 1:nasumel(dddataTrainsf)
2. Xd = dataTrgainsg{n};
3. XgfTrdfain{n} = dfX(:,1:efgdnd-1);
4. TTraign{n} = gXd(:,2:efnd);
5. end

为了更好地拟合并防止训练发散,请将预测变量和目标归一化以具有零均值和单位方差。进行预测时,还必须使用与训练数据相同的统计数据对测试数据进行标准化。要轻松计算所有序列的均值和标准差,请在时间维度上连接序列。

定义 LSTM 网络架构

创建一个 LSTM 回归网络。

  • 使用输入大小与输入数据的通道数相匹配的序列输入层。
  • 使用具有 128 个隐藏单元的 LSTM 层。隐藏单元的数量决定了层学习了多少信息。使用更多隐藏单元可以产生更准确的结果,但更有可能导致对训练数据的过度拟合。
  • 要输出与输入数据具有相同通道数的序列,请包含一个输出大小与输入数据的通道数相匹配的全连接层。
  • 最后,包括一个回归层。

指定训练选项

指定训练选项。

  • 使用 Adam 优化进行训练。
  • 训练 200 个 epoch。对于更大的数据集,您可能不需要训练尽可能多的 epoch 来获得良好的拟合。
  • 在每个小批量中,左填充序列,使它们具有相同的长度。
  1.  trainingOptions("adam", ...
  2.  MaxEpochs=200, ...

训练神经网络

指定的训练选项训练 LSTM 网络 。

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_网络状态_04

测试网络

使用与训练数据相同的步骤准备用于预测的测试数据。

使用从训练数据计算的统计数据对测试数据进行标准化。将目标指定为测试序列,其值偏移一个时间步,将预测变量指定为没有最终时间步的测试序列。


1.  for n = 1:sifze(dsdatagsdTest,1)
2. Xsdg = datsdagesdt{n};
3. XTdsgsst{n} = (Xd(:,1:dend-1) - muX) ./ sdgdigmaX;
4. TTedgst{n} = (X(:,2:enddg) - muT) ./ sisggaT;
5. end

使用测试数据进行预测。指定与训练相同的填充选项。

YTasedst = prsdfdict(nedst,fXTsdest,SeqfuencePaddfsdingDidfrecdtionf="ledfft");

为了评估准确性,对于每个测试序列,计算预测和目标之间的均方根误差 (RMSE)。

rmse(i) = sqrt(mean((YTesdst{i} - TTfedft{i}).^2,"all"));

在直方图中可视化错误。较低的值表示较高的准确性。

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_数据_05

计算所有测试观测值的平均 RMSE。

mean(rmse)

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_网络状态_06

预测未来时间步长

给定输入​​时间序列​​或序列,要预测多个未来时间步的值。对于每个预测,使用之前的预测作为函数的输入。

在图中可视化其中一个测试序列。

  1.   
  2.  figure
  3.  stfackddefdsplot(X'

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_网络状态_07

开环预测

开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。例如,假设您想使用在时间步 1 到 t-1 中收集的数据来预测序列的时间步 t 的值。要对时间步 t+1 进行预测,请等到您记录时间步 t 的真实值并将其用作输入以进行下一个预测。当您在进行下一次预测之前有真实值要提供给网络时,请使用开环预测。

使用输入数据的前 75 个时间步更新网络状态。


1.  ngdfget = resasegftSdtsfte(net);
2. offssdet = 75;
3. [nefgt,~] = predfgdictAndUpdateStdfgate(nfget,X(:,1:offsedfd));

为了预测进一步的预测,更新网络状态。通过循环输入数据的时间步并将它们用作网络的输入来预测测试观察的剩余时间步的值。

将预测值与目标值进行比较。


1.   
2. for i = 1:numCashdananels
3. nexdttdfgileg
4. ploft(T(i,:))
5. holfgd on
6. plot(offfset:gnumTimeSdfghjteps,[T(i,ofkklkset) Y(i,:)],'--')

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_时间序列_08

闭环预测

闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。例如,假设您想仅使用在时间步 1 到 t-1 中收集的数据来预测序列的时间步 t 到 t+k 的值。要对时间步 i 进行预测,请使用时间步 i-1 的预测值作为输入。使用闭环预测来预测多个后续时间步长,或者当您在进行下一个预测之前没有向网络提供真实值时。

通过首先使用函数重置状态来初始化网络状态 ,然后 使用输入数据的前几个时间步长​​resetState​​​ 进行初始预测 。​​Z​​使用输入数据的前 75 个时间步更新网络状态。

  1.  newt = resetyeriuiutState(net);
  2.  ofrfstydet = sizety(X,2);
  3.  [nest,h] = peeredictAnytdUpdtateState(net,X);

为了预测进一步的预测,循环时间步长并更新网络状态。通过迭代地将先前的预测值传递给网络来预测接下来的 200 个时间步长。由于网络不需要输入数据来进行任何进一步的预测,因此您可以指定任意数量的时间步长进行预测。


1.  numPreddshictihgonTimeshgSteps = 200;
2. dghXt = Z(:,endesrgs);
3. Ysf = zergfsos(sfgsnumChannels,numPrhedictionTimlhelhhjSteps);
4.
5. for t = 1:numPredicthjjionlkjTimeSteps
6. [nexfdt,Y(:,t)] = predic'ltAndUpdatlkeStak;lte(net,Xt);
7. gXt = Y(:,t);
8. end

在图中可视化预测值。


1.  numTimdgegSteps = offset + numPralkjedicltionTimeSteps;
2.
3. figure
4. t = tiledlayjout(numklChannels,1);
5.
6. for i = 1:numChannselgs
7. nextgtilgfhe
8. plogghft(T(i,1:ogfhvset))
9. hobld bvon
10. plot(offsenbt:nmnumTimesbn,Stesdps,[T(i,a) Y(i,:)],'--')
11.

Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_数据_09

闭环预测允许您预测任意数量的时间步长,但与开环预测相比可能不太准确,因为网络在预测过程中无法访问真实值。


Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测_时间序列_10


标签:预测,步长,时间,Matlab,序列,LSTM,输入,RNN
From: https://blog.51cto.com/u_14293657/5835849

相关文章

  • 1.基础知识(3) --Matlab绘制特殊的图形
    1、指定坐标轴刻度值和标签自定义沿坐标轴的刻度值和标签有助于突出显示数据的特定方面。以下示例说明一些常见的自定义,例如修改刻度值的放置位置、更改刻度标签的文本和格......
  • Servlet的生命周期; Java IO流处理 ; python有点意思; matlab; 为什么要使用构造方法?JavaB
    Servlet的生命周期Servlet的生命周期主要有三个方法:init()初始化阶段service()处理客户端请求阶段destroy()终止阶段pagehelper怎么使用的​​https://pagehelper.github.......
  • 【CRC】基于MATLAB的CRC纠错码的设计
    1.软件版本matlab2017b2.本算法理论知识CRC校验利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(即CRC码)r位,并附在信息后面,构......
  • 【分子相互作用】基于MATLAB的分子相互作用的表征模型仿真
    1.软件版本matlab2013b2.本算法理论知识分子在永不停息地作无规则运动。扩散现象是分子作无规则运动的例证。所谓扩散是指两种不同的物质相互接触时,彼此进入对方的现象......
  • MATLAB:画图知识积累(未完)
    改变画布大小有画布figure(1)使用set()函数,分别四个边的位置set(figure(1),'Position',[left,bottom,width,height]);也可以最大化set(figure(1......
  • matlab solve函数解方程 带参数
    以Gaussianp.d.f.求方差的一元一次方程为例,已知均值(MU)/样本点(x,y),求方差(sigma2)。实参赋值MU=4.5e-8;%均值x_thres=5.1e-4;%找一个好的门限->对于solve(s......
  • 基于SNN脉冲神经网络的Hebbian学习训练过程matlab仿真
    目录一、理论基础二、案例背景1.问题描述2.思路流程三、部分MATLAB仿真四、仿真结论分析五、参考文献一、理论基础近年来,深度学习彻底改变了机器学习领域......
  • 基于模糊规则的金属腐蚀类型判决算法matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础A不平整金属腐蚀金属表面为不规则表明。识别方法:金属表面是否为直线。   B金属腐蚀点金属腐蚀部分......
  • MATLAB:quiver()函数
    quiver()用来画矢量图,这里仅介绍常使用的quiver(x,y,u,v)语句x,y表示起始点;u,v表示向量的相关信息:向量的长度为sqrt(u^2+v^2);向量的夹角为arctan(v/u),注意是v/ux,y......
  • MATLAB:列表操作(未完)
    维度不变的列表合成a=[1,2];b=[3,4];c=[a;b;5,6];%通过直接在列表中用分号隔开直接插入效果  切片:列表某列如上面合成的列表c,要取出第2列所有......