数学建模:MATLAB循环神经网络

server/2025/3/31 9:32:53/

一、简述

1.循环神经网络

循环神经网络(RNN)是一种用于处理序列数据的神经网络。不同于传统的前馈神经网络,RNN在隐藏层中加入了自反馈连接,使得网络能够对序列中的每个元素执行相同的操作,同时保持一个“记忆”状态,这个状态会随着序列的推进而更新。

循环神经网络由输入层、隐藏层、输出层组成。输入层接受传入数据;隐藏层既接收当前时刻的输入,也接收上一时刻隐藏层的状态作为额外输入,这种结构允许RNN对序列中的每个元素执行相同的操作,同时保持一个“记忆”状态,这个状态会随着序列的推进而更新;输出层基于隐藏层的状态生成输出。

训练过程使用随时间反向传播的方法,按照标准的反向传播算法进行权重更新,并对每个时间步都执行误差反传和权重更新。

2.长短期记忆网络

长短期记忆网络是循环神经网络的一种特殊形式,用于解决传统循环神经网络在处理长时间依赖时遇到的梯度消失或爆炸问题。

通过引入细胞状态和门控机制来控制信息的流动:输入门决定哪些值将被更新到细胞状态;遗忘门决定从细胞状态中丢弃哪些信息;输出门决定下一个隐藏状态的内容。这样的设计使LSTM能够在长时间跨度内保留重要的信息,同时也能够选择性地忘记不相关的信息。

二、应用

1.预测一个数据

clear
clc%设置时间序列,代表数据中的每个时间点
time = 1:20;
%设置目标预测时间点
target_time = 21;%初始化数据数组,包含20个时间点的数据值
data = [0.845, 2.673, 0.215, 1.456, 2.987, 1.322, 0.653, 2.134, 1.567, 0.954, 2.456, 0.342, 1.789, 2.235, 0.789, 1.123, 2.567, 0.456, 1.890, 2.034];%用layrecnet函数创建一个循环神经网络,第一个参数是输入层数,第二个参数是隐藏层大小,即神经元的数量
net = layrecnet(1,10);%将data转换成序列格式以便于循环神经网络处理
%用con2seq函数将普通数值数组转换为cell数组格式
input_seq = con2seq(data');%目标序列与输入序列相同,用之前的数据点来预测下一个数据点
target_seq = con2seq(data');%用train函数训练循环神经网络
%输入参数为循环神经网络模型、输入序列和目标序列,返回训练后的网络模型
net = train(net, input_seq, target_seq);%用sim函数使用训练好的模型对输入序列进行预测,返回预测结果的序列形式
sim_y = sim(net, input_seq);%用cell2mat函数将预测结果由cell数组格式转换为普通数值数组
sim_Y = cell2mat(sim_y);%绘图
figure;
%在同一图中绘制多个曲线
hold on;%绘制原始训练数据的折线图
%LineWidth设置线条宽度,MarkerSize设置标记大小,DisplayName显示图例名称
plot(time, data, 'o-', 'LineWidth', 1.5, 'MarkerSize', 8, 'DisplayName', '训练数据');%绘制预测结果
%使用'sim_Y(end)'获取最后一个预测值
plot(target_time, sim_Y(end), 'ro', 'MarkerSize', 10, 'DisplayName', '预测结果');xlabel('时间');ylabel('结果');% 添加图例,'Location', 'best'让MATLAB自动选择图例的最佳位置。
legend('Location', 'best');% 设置图表标题。
title('预测');
hold off; 

 

2.预测多个数据

clear
clc%设置时间序列,代表数据中的每个时间点
time = 1:20;%设置目标预测时间点
target_time = 21 :25;%初始化数据数组,包含了20个时间点的数据值
data = [0.845, 2.673, 0.215, 1.456, 2.987, 1.322, 0.653, 2.134, 1.567, 0.954, 2.456, 0.342, 1.789, 2.235, 0.789, 1.123, 2.567, 0.456, 1.890, 2.034];%输入序列X是原始数据中除了最后一个元素的所有元素,长度比原始序列少一个元素
X = data(1 : end-1);%目标序列Y是原始数据中除了第一个元素的所有元素,与输入序列相对应,用于监督学习
Y = data(2:end);%将输入和目标数据转换为序列格式
%'con2seq'函数将数值向量转换为cell数组
X = con2seq(X);
Y = con2seq(Y);%创建循环神经网络模型
%设置隐藏层神经元的数量
hiddenUnits = 10; %创建具有1个输入层和指定数量隐藏单元的递归神经网络。
net = layrecnet(1, hiddenUnits);%配置训练参数
%显示训练进度窗口
net.trainParam.showWindow = true;
%设置最大迭代次数为100
net.trainParam.epochs = 100;%训练RNN模型
[net,tr] = train(net, X, Y);%将最后一个数据点转换为cell类型,用于初始化预测过程
lastInput = num2cell(data(end));%初始化存储预测结果和误差的变量
predicted_data = []; 
errors = []; % 存储误差值%对于每一个目标预测时间点,执行预测过程。
for i = 1:numel(target_time)%使用训练好的模型进行预测,结果保留三位有效数字prediction = round(cell2mat(sim(net, lastInput)), 3, 'significant');%计算误差error = abs(prediction - cell2mat(lastInput));%将当前预测结果和误差拼接到相应的列表中predicted_data = [predicted_data, prediction];errors = [errors, error];%更新lastInput为新的预测值,用于下一次循环预测lastInput = {prediction};
end%绘图
%绘制训练集和预测结果,蓝色表示训练数据,红色表示预测数据
figure
hold on
%绘制训练数据
plot(time, data, 'b') 
%绘制预测数据
plot(target_time, predicted_data, 'r') 
xlabel('年份')
ylabel('温度')
legend('训练数据', '预测数据')%用mean函数计算平均绝对误差
MAE = mean(errors);

 


http://www.ppmy.cn/server/177140.html

相关文章

大屏技术汇集【目录】

Cesium 自从首次发布以来,经历了多个版本的迭代和更新,每个版本都带来了性能改进、新功能添加以及对现有功能的优化。以下是 Cesium 一些重要版本及其主要特点: 主要版本概述 Cesium 1.0 (2012年) 初始版本发布,确立了Cesium作为…

Three.js中的加载器与资源管理:构建丰富3D场景的关键

一、引言 Three.js是一个强大的JavaScript库,用于在Web浏览器中创建和展示3D图形。在构建复杂的3D场景时,有效地加载和管理各种资源是至关重要的。加载器在Three.js中扮演着桥梁的角色,负责将外部的3D模型、纹理、字体和其他资源导入到场景中…

对接马来西亚、印度、韩国、越南等全球金融数据示例

Python对接StockTV全球金融数据API的封装实现及使用教程: import requests import websockets import asyncio from typing import Dict, List, Optional, Union from datetime import datetimeclass StockTVClient:"""StockTV全球金融数据API客户端…

操作系统的心脏节拍:CPU中断如何驱动内核运转?

目录 一、硬件中断 二、时钟中断 三、软中断 四、用户态与内核态 一、硬件中断 为引出今天的话题&#xff0c;我们来思考这样一个问题&#xff1a; #include<stdio.h> int main() {int a;scanf("%d",&a);return 0; } 当以上程序执行到scanf时&#xf…

【软考-架构】8.4、信息化战略规划-CRO-SCM-应用集成-电子商务

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 信息化战略体系&#x1f4af;考试真题第一题第二题 信息系统战略规划&#x1f4af;考试真题第一题第二题 ✨客户关系管理CRM供应链管理SCM&#x1f4af;考试真题第一题第二…

HTML语言的贪心算法

HTML语言的贪心算法&#xff1a;理论与实践 引言 在编程和算法研究中&#xff0c;贪心算法是一种广泛应用的解决问题的方法。它通过对每一阶段选择最优解的方式来构建整个问题的解决方案。贪心算法不一定能在所有情况下得到最优解&#xff0c;但在许多实际问题中&#xff0c;…

计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)

计算机网络&#xff1a;&#xff08;二&#xff09;计算机网络在我国发展与网络类别和性能 前言一、计算机网络在我国的发展二、计算机网络的类别1. 计算机网络的定义2. 不同类别的计算机网络&#xff08;1&#xff09;按覆盖范围分类&#xff08;2&#xff09;按传输技术分类…

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…