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

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

原文链接:http://tecdat.cn/?p=27279 


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


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

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

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


开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。


闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。

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

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


点击标题查阅往期内容


Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测


01

02

03

04


加载数据


查看前几个序列的大小。

data(1:5)

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

nufdmChahgnnhels = 3

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

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

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


准备训练数据


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

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

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


定义 LSTM 网络架构


创建一个 LSTM 回归网络。


使用输入大小与输入数据的通道数相匹配的序列输入层。


使用具有 128 个隐藏单元的 LSTM 层。隐藏单元的数量决定了层学习了多少信息。使用更多隐藏单元可以产生更准确的结果,但更有可能导致对训练数据的过度拟合。


要输出与输入数据具有相同通道数的序列,请包含一个输出大小与输入数据的通道数相匹配的全连接层。


最后,包括一个回归层。


指定训练选项


指定训练选项。


使用 Adam 优化进行训练。


训练 200 个 epoch。对于更大的数据集,您可能不需要训练尽可能多的 epoch 来获得良好的拟合。


在每个小批量中,左填充序列,使它们具有相同的长度。

trainingOptions("adam", ...    MaxEpochs=200, ...


训练神经网络


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

测试网络


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

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

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

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

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

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

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

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

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

mean(rmse)

预测未来时间步长


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

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

figurestfackddefdsplot(X'

开环预测


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

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

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

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

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

for i = 1:numCashdananels
    nexdttdfgileg
    ploft(T(i,:))
    holfgd on
    plot(offfset:gnumTimeSdfghjteps,\[T(i,ofkklkset) Y(i,:)\],'--')

闭环预测


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

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

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

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

numPreddshictihgonTimeshgSteps = 200;dghXt = Z(:,endesrgs);Ysf = zergfsos(sfgsnumChannels,numPrhedictionTimlhelhhjSteps);
for t = 1:numPredicthjjionlkjTimeSteps
    \[nexfdt,Y(:,t)\] = predic'ltAndUpdatlkeStak;lte(net,Xt);
    gXt = Y(:,t);
end

在图中可视化预测值。

numTimdgegSteps = offset + numPralkjedicltionTimeSteps;figure
t = tiledlayjout(numklChannels,1);for i = 1:numChannselgs
    nextgtilgfhe
    plogghft(T(i,1:ogfhvset))
    hobld bvon
    plot(offsenbt:nmnumTimesbn,Stesdps,\[T(i,a) Y(i,:)\],'--')

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

相关文章
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
6天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
4天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
21 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
7天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
21 0
|
9天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习的奇迹:如何用神经网络识别图像
【10月更文挑战第33天】在这篇文章中,我们将探索深度学习的奇妙世界,特别是卷积神经网络(CNN)在图像识别中的应用。我们将通过一个简单的代码示例,展示如何使用Python和Keras库构建一个能够识别手写数字的神经网络。这不仅是对深度学习概念的直观介绍,也是对技术实践的一次尝试。让我们一起踏上这段探索之旅,看看数据、模型和代码是如何交织在一起,创造出令人惊叹的结果。
19 0
|
3天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全成为了我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和方法来保护自己的信息安全。
14 2
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第38天】本文将探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术和安全意识等方面。我们将通过代码示例和实际操作来展示如何保护网络和信息安全。无论你是个人用户还是企业,都需要了解这些知识以保护自己的网络安全和信息安全。
|
3天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全策略
【10月更文挑战第39天】随着云计算的飞速发展,越来越多的企业和个人将数据和服务迁移到云端。然而,随之而来的网络安全问题也日益突出。本文将从云计算的基本概念出发,深入探讨在云服务中如何实施有效的网络安全和信息安全措施。我们将分析云服务模型(IaaS, PaaS, SaaS)的安全特性,并讨论如何在这些平台上部署安全策略。文章还将涉及最新的网络安全技术和实践,旨在为读者提供一套全面的云计算安全解决方案。
|
3天前
|
存储 安全 网络安全
网络安全与信息安全:漏洞、加密技术与安全意识的交织
【10月更文挑战第39天】在数字化时代,网络安全与信息安全成为保护个人隐私和组织资产的重要屏障。本文将探讨网络安全中的常见漏洞、加密技术的应用以及提升安全意识的重要性。通过具体案例分析,我们将深入了解网络攻击的手段和防御策略,同时提供实用建议,以增强读者对网络安全的认识和防护能力。
|
3天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和设备安全。

热门文章

最新文章