基于CNN-LSTM的时序预测MATLAB实战

卷积神经网络(CNN)用于提取时间序列数据中的局部空间特征,通过卷积层和池化层的堆叠,CNN能够有效捕获数据中的短期模式和局部依赖关系。长短时记忆网络(LSTM)用于处理时间序列数据,特别擅长捕捉数据中的长期依赖关系,LSTM通过引入门控机制和记忆单元来解决长期依赖问题。基于CNN-LSTM的时序预测结合上述两种网络的优点,同时考虑了时空特征,模型通常能够获得更高的预测精度。

一、算法原理

1.1 CNN原理 

卷积神经网络具有局部连接、权值共享和空间相关等特性。卷积神经网络结构包含卷积层、激活层和池化层。

(a)二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平方向 移动滤波器对输入进行卷积,并计算权重与输入的点积,然后加入一个偏置项。具体表达式为:

图片

卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,也称为感受野。将输入图像和卷积核做卷积运算,可以增强原始信号特征的同时降低噪声,卷积运算的具体过程如图所示。

图片

卷积运算的具体过程

(2)激活函数

在卷积神经网络中,常用的激活函数包括 Sigmoid 函数、Tanh 函数、Swish 函数和 Relu 函数。Relu 函数解决了 Sigmoid 函数和 Tanh 函数梯度消失的问题, 提高了模型收敛的速度,受到的广泛学者的欢迎。

(3)池化层

池化层又称为下采样层,池化层分为平均池化层和最大池化层。其中,最大池化层通过将输入分为矩形池化区域,并计算每个区域的最大值来执行下采样, 而平均池化层则是计算池化区域的平均值来执行下采样。池化层的池化过程如图所示。

图片

池化过程示意图

1.2 LSTM原理 

LSTM采用循环神经网络( Recurrent Neural Network,RNN )架构[8],它是专门为从序列中学习长期依赖关系而设计的。LSTM可以使用4个组件:输入门、输出门、遗忘门和具有自循环连接的单元来移除或添加块状态的信息。

图片

LSTM网络结构

设输入序列共有 k 个时间步,LSTM 门控机制 结构为遗忘门、输入门和输出门,xt携带网络输入值 作为向量引入系统,ht 通过隐含层对 LSTM 细胞进 行输出,ct携带着 LSTM 细胞状态进行运算。LSTM 运算规则如下:

图片

计算后保留 ct与 ht,用于下一时间步的计算;最后一步计算完成后,将隐藏层向量 hk作为输出与本组序列对应的预测值对比,得出损失函数值,依据梯度下降算法,优化权重和偏置参数,以此训练出迭代次数范围内最精确的网络参数。

1.3 CNN-LSTM框架

以时序预测为例,本次使用的CNN-LSTM框架如图所示。

图片

CNN-LSTM框架

二、具体模型框架

通过layerGraph来组合CNN和LSTM层,并使用trainNetwork函数进行模型训练,使用Dropout技术来减少模型的过拟合现象。

对LSTM参数进行设置,确定数据输入的特征维度,即时间步长的特征数量。numhidden_units1numhidden_units2numhidden_units3分别代表不同LSTM层中的隐含单元数。例如,可以设置为50、20、100,表示不同层的神经元数量。Dropout层用于减少过拟合,例如设置为0.3,表示在训练过程中随机丢弃30%的神经元。

使用Adam优化算法进行训练,这是一种改进的梯度优化算法,能够解决传统SGD算法的一些问题。训练完成后使用测试数据集进行预测,并采用如均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)等评价指标来定量评估模型性能。

clc
clear
load('Train.mat')
load('Test.mat')

% LSTM 层设置,参数设置
inputSize = size(Train_xNorm{1},1);   %数据输入x的特征维度
outputSize = 1;  %数据输出y的维度  
numhidden_units1=50;
numhidden_units2= 20;
numhidden_units3=100;
%
opts = trainingOptions('adam', ...
    'MaxEpochs',10, ...
    'GradientThreshold',1,...
    'ExecutionEnvironment','cpu',...
    'InitialLearnRate',0.001, ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropPeriod',2, ...   %2个epoch后学习率更新
    'LearnRateDropFactor',0.5, ...
    'Shuffle','once',...  % 时间序列长度
    'SequenceLength',k,...
    'MiniBatchSize',24,...
    'Verbose',0);
%% lstm

layers = [ ...
    
    sequenceInputLayer([inputSize,1,1],'name','input')   %输入层设置
    sequenceFoldingLayer('name','fold')
    convolution2dLayer([2,1],10,'Stride',[1,1],'name','conv1')
    batchNormalizationLayer('name','batchnorm1')
    reluLayer('name','relu1')
    maxPooling2dLayer([1,3],'Stride',1,'Padding','same','name','maxpool')
    sequenceUnfoldingLayer('name','unfold')
    flattenLayer('name','flatten')
    lstmLayer(numhidden_units1,'Outputmode','sequence','name','hidden1') 
    dropoutLayer(0.3,'name','dropout_1')
    lstmLayer(numhidden_units2,'Outputmode','last','name','hidden2') 
    dropoutLayer(0.3,'name','drdiopout_2')
    fullyConnectedLayer(outputSize,'name','fullconnect')   % 全连接层设置(影响输出维度)(cell层出来的输出层) %
    tanhLayer('name','softmax')
    regressionLayer('name','output')];

lgraph = layerGraph(layers)
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');
plot(lgraph)
%
% 网络训练
tic

net = trainNetwork(Train_xNorm,Train_yNorm,lgraph,opts);

%% 测试
figure
Predict_Ynorm = net.predict(Test_xNorm);
Predict_Y  = mapminmax('reverse',Predict_Ynorm',yopt);
Predict_Y = Predict_Y';

plot(Predict_Y,'g-')
hold on 

plot(Test_y);    
legend('预测值','实际值')

通过比较预测值和实际值可以评估模型的性能,通常使用图表来展示预测结果与实际结果的对比:

图片

基于CNN-LSTM的时序预测模型结合了CNN的特征提取能力和LSTM的时序建模能力,使其在处理具有复杂空间和时间依赖性的时间序列数据方面表现出色。在MATLAB中实现这一模型,可以利用其强大的内置函数和深度学习工具箱,进行有效的模型构建、训练和评估。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D可视化产品定制,打造“所见即所得”的购物体验!

在当今数字化时代,3D可视化产品定制正逐步改变着消费者的购物体验与企业的销售模式,相较于大多仍停留在二维层面的线上定制服务,3D可视化产品定制为消费者提供了一个直观、互动且高度个性化的定制功能,并为消费者带来了沉浸式的购…

捉虫记录02-Nacos访问失败

目录 一、问题 二、排查 三、解决方案 一、问题 在访问nacos的时候出现以下问题: 二、排查 先用docker logs nacos来查找报错信息 docker logs nacos 看问题报错就是数据源问题,nacos没能连接上mysql 三、解决方案 第一步 docker restart mysql …

详细教程-Linux上安装单机版的Hadoop

1、上传Hadoop安装包至linux并解压 tar -zxvf hadoop-2.6.0-cdh5.15.2.tar.gz 安装包: 链接:https://pan.baidu.com/s/1u59OLTJctKmm9YVWr_F-Cg 提取码:0pfj 2、配置免密码登录 生成秘钥: ssh-keygen -t rsa -P 将秘钥写入认…

桌面怎么快速添加便签?适合桌面记事的便签小工具

在数字化时代,我们每天面对电脑处理大量任务,无论是工作计划、会议纪要还是个人生活琐事,都需要一个可靠的桌面记事工具来帮助我们记录和整理。因此,一款适合桌面使用的便签软件成为了我们不可或缺的助手。 敬业签就是这样一款功…

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…

Mysql案例之COALESCE函数使用详解

hello,大家好,我是灰小猿!最近在做一个三表关联查询的场景处理时,遇到了一个比较有用的MySQL函数,在这里记录一下,大概场景如下: 需求场景 场景:有一张object_rel表,表中…

机器学习—迁移学习:使用其他任务中的数据

对于一个没有那么多数据的应用程序,迁移学习是一种奇妙的技术,它允许你使用来自不同任务的数据来帮助你的应用程序,迁移学习是如何工作的? 以下是迁移学习的工作原理,假设你想识别手写的数字0到9,但是你没…

寻找用户推荐人(考点:ifnull)【SQL+Pandas】

今天尝试刷一下力扣的sql面试题&#xff0c;这个写法我也是第一次见 题目是 我们需要在这个表中查出referee_id&#xff01;2的 正确写法是 select name from customer where ifnull(referee_id,0) ! 2 -- 不等于还可以这么写&#xff1a;<>

【软件开发】如何理解异地多活?

本文转载自https://mp.weixin.qq.com/s/T6mMDdtTfBuIiEowCpqu6Q,对文章部分内容做二次修改。 文章目录 01 系统可用性02 单机架构03 主从副本04 风险不可控05 同城灾备06 同城双活07 两地三中心08 伪异地双活09 真正的异地双活10 如何实施异地双活11 异地多活总结在软件开发领…

探索PDFMiner:Python中的PDF解析利器

文章目录 **探索PDFMiner&#xff1a;Python中的PDF解析利器**1. 背景介绍&#xff1a;为何选择PDFMiner&#xff1f;2. PDFMiner是什么&#xff1f;3. 如何安装PDFMiner&#xff1f;4. 简单库函数使用方法4.1 提取文本4.2 获取页面布局信息4.3 提取表格数据4.4 提取图像 5. 应…

攻防世界Web-bug

打开链接 先注册一个账号 创建成功&#xff0c;会给一个UID5 抓包的user值就是UID:用户名的md5加密的编码 点击Manage时要求admin用户 利用改包把user改成admin 1:admin的md5值为4b9987ccafacb8d8fc08d22bbca797ba 还要把url上的UID改为1 存在逻辑漏洞&#xff0c;成功越权 …

LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models

ChatGPT 是基于大型语言模型&#xff08;LLM&#xff09;的人工智能应用。 GPT 全称是Generative Pre-trained Transformer。-- 生成式预训练变换模型&#xff1a; Generative&#xff08;生成式&#xff09;&#xff1a;可以根据输入生成新的文本内容&#xff0c;例如回答问题…

柔性数组(C语言)

柔性数组是 C99 标准中引入的一种特殊的数组&#xff0c;它可以用作结构体的最后一个成员&#xff0c;以便动态分配内存时灵活管理数组的大小。 1. 柔性数组的定义 柔性数组是结构体的最后一个成员&#xff0c;声明时不需要指定大小。例如&#xff1a; struct FlexibleArray {…

图像处理实验报告

实验一 图像处理的MATLAB基础 实验目的&#xff1a;熟悉数字图象处理的基本软件工具和操作 实验内容&#xff1a;Matlab应用复习&#xff0c;矩阵产生、操作&#xff1b;矩阵运算以及字符运算。 1.利用增量产生向量[0,2,4,6,8,10]。 2.利用magic(n)函数产生7维魔鬼矩阵A&am…

NLP论文速读(MPO)|通过混合偏好优化提高多模态大型语言模型的推理能力

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息&#xff1a; 简介&#xff1a; 本文探讨的背景是多模态大型语言模型&#xff08;MLLMs&#xff09;在多模态推理能力上的局限性&#xff0c;尤其是在链式…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

Java项目实战II基于微信小程序的图书馆自习室座位预约平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在知识爆炸的时代&#xff0c;图书馆和…

图像处理 - 色彩空间转换

色彩空间转换的含义与原理 色彩空间转换是指将一种颜色模型或表示方式中的颜色数据映射到另一种颜色模型中的过程。色彩空间&#xff08;Color Space&#xff09;本质上是一个三维坐标系统&#xff0c;每个点都表示图像中的某种颜色。在实际应用中&#xff0c;由于不同的色彩空…

web——sqliabs靶场——第十三关——报错注入+布尔盲注

发现是单引号加括号闭合的 尝试联合注入 发现不太行&#xff0c;那尝试报错注入。 测试报错注入 unameadmin) and updatexml(1,0x7e,3) -- &passwdadmin&submitSubmit 爆数据库 unameadmin) and updatexml(1,concat(0x7e,database(),0x7e),3) -- &passwdadmin&a…