深度学习--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.mzph.cn/news/405501.shtml

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

相关文章

计算机桌面怎么全屏显示,电脑显示器如何设置成满屏

在有些时候我们的网友不清楚电脑显示器如何设置成满屏,那么下面就由学习啦小编来给你们说说电脑显示器设置成满屏的方法吧,希望可以帮到你们哦!电脑显示器设置成满屏的方法:右击桌面,选择弹出对话框中的【屏幕分辨率】如下图。弹出…

Matlab中求数据概率分布的方法

一、问题描述 对已有的一些列数据进行分析,想得到该数据的分布和统计特性,如概率密度函数,概率分布,累计概率密度等等。 例如,已有一段时间的声音测量数据,求该数据的分布特性,并给出噪声的95…

matlab设置plot图像尺寸大小、坐标轴等

Matlab作为工程中的数据可视化工具是非常的方便的。但是在具体的生成过程中通常会遇见以下几个比较常见的问题,这里以我最近在写论文中用图遇到的问题作为例子。简要说明输出图像大小位置规范的重要性。 1:colorbar的位置大小范围不一致、不合理 2&#…

MMN实用架构过程概览

MMN(Macro-Micro-Nano,即宏观-微观-纳米)实用架构过程初步体现了我的架构观:即以实用主义态度把握架构原则与本质思想,从系统的各个层次剖析架构,提供一个具有指导意义和实施价值的架构过程,采取…

实践分享:开始用Cordova+Ionic+AngularJS开发App

http://www.cocoachina.com/webapp/20150707/12395.html 本文是一篇关于我本人在使用CordovaIonic以及AngularJS开发移动App的过程中的经验的总结,它不是一篇基础入门教程,而是和大家探讨一下关于如何更好的使用这些技术开发一个更好的App。 声明&#x…

git仓库的基本用法

一、简介 git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。git很容易学习,而且它的占用资源很小,性能也非常好。它超越了subversion、cvs、perforce和clearcase等scm工具,具有廉价的本地分支、…

关于检测手机信号强度,wifi信号强度以及检测周围wifi热点的一个小例子

From: http://blog.csdn.net/wanglj0925/article/details/7743182 一.检测手机信号强度 检测手机信号强度需要用到TelephonyManager类 这个类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在…

转载:关于爱情、伴侣、承诺、人生、

关于爱情: 不要认为后面还有更好的,因为现在拥有的就是最好的。 不要认为还年轻可以晚些结婚,爱情是不等年龄的。 不要因为距离太远而放弃,爱情可以和你一起坐火车的。 不要因为对方不富裕而放弃,只要不是无能的人&am…

Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法。

方法一、浏览器设置成兼容模式。 方法二、安装服务器版的.Net40的补丁。http://download.csdn.net/detail/5653325/6642051 方法三、点击VS的工具菜单--》库程序包管理器--》程序包管理器控制台(如果没有“库程序包管理器”的菜单,就先点那个“扩展管理器…

数理统计中的卡方分布,t分布和F分布

有很多统计推断是基于正态分布的假设,以标准正态分布变量为基石而构造的三个著名统计量在实际中有广泛的应用,这是因为这三个统计量不仅有明确背景,而且其抽样分布的密度函数有显式表达式,它们被称为统计中的“三大抽样分布”。这…

Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization

克隆虚拟机后,网卡无法启动,并报如下错误: 解决办法1.修改虚拟机克隆机的HWADDR为ifconfig -a的MAC地址 形如:HWADDR"xx:xx:xx:xx:xx:xx" 2.然后再做以下操作 # rm -rf /etc/udev/rules.d/70-persistent-net.rules # re…

在计算机发展的早期 计算机主要用于,全国网络统考《计算机应用基础》选择题复习...

全国网络统考《计算机应用基础》选择题复习 全国网络统考《计算机应用基础》选择题复习第一章计算机基础知识【例题与解析】、一般认为,世界上第一台电子计算机诞生于()。年年年年【解析一般认为,世界上第一台数字计算机于年在美国宾夕法尼亚大学研制成功…

数理统计中95%置信区间的含义

95%置信区间,意味着如果你用同样的步骤,去选样本,计算置信区间,那么100次这样的独立过程,有95%的概率你计算出来的区间会包含真实参数值,即大概会有95个置信区间会包含真值。而对于某一次计算得到的某一个置…

Linux 程序后台运行与删除

一、查看进程:ps 或 ps -a 二、命令后台运行: sudo ./runmyled.o& 命令后边跟个&, 返回进程id号 三、查看当前的进程: 四、删除进程:sudo kill id1 id2 id3