深度学习--Matlab使用LSTM长短期记忆网络对负荷进行预测

一、LSTM描述

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。[概念参考:百度百科]

LSTM网络结构如下图:[图片来源:OPEN-OPEN]

单个LSTM主要包括以下四个步骤。

(1)遗忘门

(2)更新输入信息

(3)更新网络状态

 

(4)网络输出信息

更详细的分析,此处不再描述,本文着重实现和解决问题。

 

二、问题描述

已有一个月的电力负荷数据,该负荷数据为每15分钟一个数据点,要求通过对该数据进行学习,对未来的负荷数据进行预测。

采用单向LSTM长短期记忆网络进行深度学习,采用MATLAB平台实现。

 

三、MATLAB实现

3.1 加载原始数据

原始数据需要构建为行向量,即时间序列值。

%%
%加载数据,重构为行向量
datayears = load('RPD_data.mat');
datayears = datayears.Prpd;
data = datayears(length(datayears)-96*(31):end);
data = data';%很多人问我这个datayears是什么,这里解释一下,以上代码是加载数据
%把你的负荷数据赋值给data变量就可以了。
%data是行向量。要是还不明白,就留言吧。figure
plot(data)
xlabel("Days")
ylabel("Loads")
title("Daily load")

运行结果如下:

3.2 数据预处理

%%
%序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain = floor(0.9*numel(data));
dataTrain = data(1:numTimeStepsTrain+1);
dataTest = data(numTimeStepsTrain+1:end);%数据预处理,将训练数据标准化为具有零均值和单位方差。
mu = mean(dataTrain);
sig = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sig;%输入LSTM的时间序列交替一个时间步
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);

3.3 创建LSTM网络

%%
%创建LSTM回归网络,指定LSTM层的隐含单元个数96*3
%序列预测,因此,输入一维,输出一维
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 96*3;layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits)fullyConnectedLayer(numResponses)regressionLayer];%指定训练选项,求解器设置为adam, 250 轮训练。
%梯度阈值设置为 1。指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
options = trainingOptions('adam', ...'MaxEpochs',250, ...'GradientThreshold',1, ...'InitialLearnRate',0.005, ...'LearnRateSchedule','piecewise', ...'LearnRateDropPeriod',125, ...'LearnRateDropFactor',0.2, ...'Verbose',0, ...'Plots','training-progress');
%训练LSTM
net = trainNetwork(XTrain,YTrain,layers,options);

3.4 预测数据

!!!!这里补充一下很多人说没有看到的XTest YTest:

dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
YTest = dataTest(2:end);

这里采用上一时刻的观测值来预测下一时刻的预测值。

net = resetState(net);
net = predictAndUpdateState(net,XTrain);YPred = [];
numTimeStepsTest = numel(XTest);
for i = 1:numTimeStepsTest[net,YPred(:,i)] = predictAndUpdateState(net,XTest(:,i),'ExecutionEnvironment','cpu');
end%使用先前计算的参数对预测去标准化。
YPred = sig*YPred + mu;%计算均方根误差 (RMSE)。
rmse = sqrt(mean((YPred-YTest).^2))

3.5 查看预测结果

%将预测值与测试数据进行比较。
figure
subplot(2,1,1)
plot(YTest)
hold on
plot(YPred,'.-')
hold off
legend(["Observed" "Predicted"])
ylabel("Loads")
title("Forecast with Updates")subplot(2,1,2)
stem(YPred - YTest)
xlabel("Days")
ylabel("Error")
title("RMSE = " + rmse)figure
subplot(2,1,1)
plot(dataTrain(1:end-1))
hold on
idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);
plot(idx,[data(numTimeStepsTrain) YPred],'.-')
hold off
xlabel("Days")
ylabel("Loads")
title("Forecast")
legend(["Observed" "Forecast"])
subplot(2,1,2)
plot(data)
xlabel("Days")
ylabel("Loads")
title("Daily load")

可以看到预测效果非常的好。

其他:

深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类

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

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

相关文章

电力负荷预测数据集

电力负荷预测,用电量以及温度、湿度、风速、降雨等数据,每15min一组,共计13个月 下载链接:https://download.csdn.net/download/ncusz/82632972

Python画用电客户日负荷曲线图

Python版本:Python3.6.2 一、日负荷曲线 摘自百度百科,日负荷曲线是描述一日内负荷随时间变化的曲线。 二、数据处理 数据:申请的爱尔兰开源用户用电数据,txt格式,一个文件将近400M,用写字板打开,很卡。 截…

基于改进粒子群IPSO与LSTM的短期电力负荷预测

短期电力负荷预测是电力系统安全调度、经济运行的重要依据 , 随着电力系统的市场化 , 负荷预测的精度直接影响到电力系统运行的可靠性、经济性和供电质量。LSTM 为短期电力负荷预测提供了一个新的研究方向。本文将LSTM用于短期电力负荷预测 , 提出基于LSTM 的短期电力负荷预测模…

电力负荷预测三篇综述总结

三篇综述链接: 深度学习方法在负荷预测中的应用综述(论文阅读)光伏发电量和用电量的概率预测研究综述(1)光伏发电量和用电量的概率预测研究综述(2)光伏发电量和用电量的概率预测研究综述&#…

记录一次生产服务器CPU400%满负荷处理过程

记录一次生产服务器CPU400%满负荷处理过程 文章目录 记录一次生产服务器CPU400%满负荷处理过程步骤猜测解决方法反思总结 步骤 top命令 31779进程 占 CPU 361% ,通过最后的COMMAND可以判断是java进程 通过jvm的 jsp -l命令 查询 31779进程 是 zipkin-server-2.…

Python 多进程下开多线程满负荷工作

最开始只是有这样一个想法,后来想实现一下 本文只是写一个例子,实现了开多个进程,每个进程下面开多线程,每个进程执行单独一个任务,并行执行,进程下的多线程执行任务,并发执行 import multiprocessing import threading import timedef m_test():for i in range(25):tthreadin…

磁盘IO满负荷性能分析

磁盘IO满负荷性能分析 2011-06-26 22:30:59| 分类:linux优化 |举报|字号 订阅 磁盘IO满负荷性能分析(一) 有个项目最近发现在执行一些oracle数据库的数据补入的sql语句时非常慢,经查发现来自存储的硬盘io会冲到100busy devic…

【板卡调试】测试篇 满负荷 网口测试篇

1、满负荷测试 对于window环境下载,下载使用7.zip的软件,进入工具中选择基准测试,即可。 原理:根据选择的线程核数,进行多线程式的解压缩操作,进而实现CPU满负荷运载。 工具下载链接:https:/…

Android Studio实现记单词App,背完四六级一次过~

项目目录 一、项目概述二、主要技术三、开发环境四、详细设计1、数据库2、单词详情3、搜索单词 五、运行演示六、源码获取 一、项目概述 本系统包含高考、四级、六级、托福和雅思词汇五个章节。每个章节分为多个单元,每个单元又包含上百个词汇。可以在单元列表查询…

英语背单词秘籍

注:文章已于2021年2月4日更新。 文章目录 1. 大多数人背单词的现状2. 为什么不推荐使用现成的单词书3. 费曼学习法来帮助背单词1. 大多数人背单词的现状 背单词是大型考试中极为基础但却至关重要的一步。但很多同学都在此步中就踩了坑,比如买了一本厚厚的单词书开始背起,如…

安卓android记单词软件

课程设计项目总结,基于安卓的记单词软件,分为前端和服务器端,前端使用安卓,后端使用SSM框架。 具体技术栈为: 前端:android、okhttp、sqlite、litepal等 后端:SSM(SpringMVCSpringMybatis)、mysql数据库、tomcat服务器…

Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词

Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词,可乱序抽查,可对错题进行反复抽查 完整程序源代码下载:Python背单词记单词小程序 词库生成…

为了背单词,我花了两天写了一款背单词小程序

前言 “要是考试不考英语就好了” 哎,提起英语,都是伤心事。有时候严重怀疑自己不是一块学习英语的料。单词背了忘,忘了背,背了又忘。考试之前看啥单词都会,一上考场:这单词啥意思? …

大量背单词有用吗?

前言 从三年级开始接触英语,到今为止已经14年了,可是自己的英语水平虽不至于茫然无知,可是真正做到和老外进行交流,还是有一定的困难的。不仅是老外,和小伙伴进行topic的时候,也有卡壳的时候,类…

单词背记系统

题目 B4:基于关键词的文本排序检索系统 一、 课题内容和要求 题目 B4: (一)课题内容 “背单词—个性化背词”是背诵英语单词的软件。用户可以根据自己的需求 导入需背诵的词库,并可以编辑自己的词库。背单词时有两种…

背单词超实用的微信小程序来了

如果你还找不到快速背单词的工具,查询单词最便捷的工具,那你得赶紧了,自己独自开发到上线得微信小程序来了。

分享一款好用的电脑背单词软件

推荐一下这款单词风暴,虽然看起来很老了,但是好用,功能多。 下载地址 单词风暴免费版下载_官方免费版_单词风暴官方网站 (wordstorming.com) 下面是主界面 需要登陆ID:285804755-QGJTE-HCUMQ 下面是词库 不过我最喜欢的功能是这里面可以…

chatgpt赋能python:使用Python编写计算器

使用Python编写计算器 你是否曾经被手头上的计算器的功能所限制?或者需要一种高级计算器来解决你的问题?如果是这样的话,那么你可以使用Python编写一个自己的计算器。Python是一种功能强大而又容易入门的编程语言,可以用于各种各…

chatgpt赋能python:Python计算器代码实现——简单又实用

Python计算器代码实现——简单又实用 Python 作为一门高级编程语言,具有易读易写的特性,其语法简单,易于上手,受到越来越多的程序员和爱好者的喜欢。在Python中,实现计算器功能也是非常简单的一件事情。 为了方便大家…

chatgpt赋能python:Python计算器:简单易用的数学工具

Python计算器:简单易用的数学工具 作为一种脚本语言,Python被广泛用于数据分析、Web开发、机器学习等领域,它也是一款非常适合编写计算器的语言。Python计算器作为一款基于Python语言编写而成的数学工具,它不但可以快速进行各种基…