目录

1. LSTM介绍

2. 数据集准备及预处理

3.  LSTM模型搭建与训练

4. 预测模型测试

1. LSTM介绍

长短期记忆网络 LSTM(long short-term memory)是 RNN 的一种变体,其核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。LSTM网络介绍

2. 数据集准备及预处理

加载、清理和划分数据集。

DateTime Temperature Humidity Wind Speed general diffuse flows diffuse flows Zone 1 Power Consumption Zone 2  Power Consumption Zone 3  Power Consumption
1/1/2017 0:00 6.559 73.8 0.083 0.051 0.119 34055.7 16128.88 20240.96
1/1/2017 0:10 6.414 74.5 0.083 0.07 0.085 29814.68 19375.08 20131.08
1/1/2017 0:20 6.313 74.5 0.08 0.062 0.1 29128.1 19006.69 19668.43
1/1/2017 0:30 6.121 75 0.083 0.091 0.096 28228.86 18361.09 18899.28
1/1/2017 0:40 5.921 75.7 0.081 0.048 0.085 27335.7 17872.34 18442.41
1/1/2017 0:50 5.853 76.9 0.081 0.059 0.108 26624.81 17416.41 18130.12
1/1/2017 1:00 5.641 77.7 0.08 0.048 0.096 25998.99 16993.31 17945.06
1/1/2017 1:10 5.496 78.2 0.085 0.055 0.093 25446.08 16661.4 17459.28
1/1/2017 1:20 5.678 78.1 0.081 0.066 0.141 24777.72 16227.36 17025.54
1/1/2017 1:30 5.491 77.3 0.082 0.062 0.111 24279.49 15939.21 16794.22
1/1/2017 1:40 5.516 77.5 0.081 0.051 0.108 23896.71 15435.87 16638.07
close all
clear
clc
tbl = readtable("国外负荷预测数据集.csv");%读取负荷预测数据
tbl.DateTime = datetime(tbl.DateTime,'InputFormat','dd/MM/yyyy HH:mm');%修改读取时间的格式tbl = rmmissing(tbl);%数据预处理
head(tbl)
tbl = tbl(:, [1 end-2:end]);%提取3个中心城区负荷消耗数据
head(tbl)
figure
stackedplot(tbl,'XVariable','DateTime')%绘制趋势分布图
title("国外负荷预测数据集")
data = groupSequences(tbl, "DateTime");
[train_data, val_data, test_data] = splitSequence(data);%划分训练测试验证集
muPredictors = mean(cat(2, train_data{:, 1}), 2);
sigmaPredictors = std(cat(2,train_data{:, 1}), 0, 2);muResponses = mean(cat(2, train_data{:, 2}), 2);
sigmaResponses = std(cat(2, train_data{:, 2}), 0, 2);for i = 1:size(train_data, 1)train_data{i, 1} = (train_data{i, 1} - muPredictors) ./ sigmaPredictors;train_data{i, 2} = (train_data{i, 1} - muResponses) ./ sigmaResponses;val_data{i, 1} = (val_data{i, 1} - muPredictors) ./ sigmaPredictors;val_data{i, 2} = (val_data{i, 1} - muResponses) ./ sigmaResponses;test_data{i, 1} = (test_data{i, 1} - muPredictors) ./ sigmaPredictors;test_data{i, 2} = (test_data{i, 1} - muResponses) ./ sigmaResponses;
end

负荷分布

groupSequences程序:

function data = groupSequences(tbl, groupByColumn)
argumentstbl tablegroupByColumn (1, 1) string
endif isa(tbl{1, groupByColumn}, "datetime")indexes = unique(dateshift(tbl{:, groupByColumn}, "start", "day"), "rows", "stable");
elseindexes = unique(tbl{:, groupByColumn}, "rows", "stable");
end
indexes = sort(indexes, "ascend");numIdxs = length(indexes);
data = cell(numIdxs, 1);
if isa(tbl{1, groupByColumn}, "datetime")for idx = 1:numIdxsdata{idx} = tbl{dateshift(tbl{:, groupByColumn}, "start", "day") == indexes(idx), (tbl.Properties.VariableNames ~= groupByColumn)}';end
elsefor idx = 1:numIdxsdata{idx} = tbl{tbl{:, groupByColumn} == indexes(idx), (tbl.Properties.VariableNames ~= groupByColumn)}';end
endend

splitSequence程序:

function [train, val, test] = splitSequence(data, val_perc, test_perc)
argumentsdata (:, 1) cellval_perc double = 0.1test_perc double = 0.1
endlen = size(data, 1);train = cell(len, 2);
val = cell(len, 2);
test = cell(len, 2);for i = 1:lensteps = size(data{i}, 2);stepsTrain = floor((1 - val_perc - test_perc) * steps);stepsVal = floor(val_perc * steps);train{i, 1} = data{i}(:, 1:stepsTrain-1);train{i, 2} = data{i}(:, 2:stepsTrain);val{i, 1} = data{i}(:, (stepsTrain + 1):(stepsTrain + stepsVal - 1));val{i, 2} = data{i}(:, (stepsTrain + 2):(stepsTrain + stepsVal));test{i, 1} = data{i}(:, (stepsTrain + stepsVal + 1):(end - 1));test{i, 2} = data{i}(:, (stepsTrain + stepsVal + 2):end);
endend

3.  LSTM模型搭建与训练

负荷预测数据集包含3个区域负荷的基础特征。模型搭建:

features = 3;
% Hyperparameters
hidden_units = 256;
max_epochs = 3000;
epoch_drop_period = 30;
batch_size = 32;
grad_thresh = 1;
ilr = 1e-2;%学习率
layers = [sequenceInputLayer(features)fullyConnectedLayer(hidden_units)lstmLayer(hidden_units, "OutputMode", "sequence")dropoutLayer(0.5)fullyConnectedLayer(features)regressionLayer]

模型参数分析

模型训练超参数设置:优化器选择带动量的随机梯度下降算法

opts = trainingOptions("sgdm", ..."MaxEpochs", max_epochs, ..."MiniBatchSize", batch_size, ..."ValidationData", {val_data(:, 1), val_data(:, 2)}, ..."GradientThreshold", grad_thresh, ..."InitialLearnRate", ilr, ..."LearnRateSchedule", "piecewise", ..."LearnRateDropPeriod", epoch_drop_period, ..."Shuffle", "every-epoch", ..."Plots", "training-progress", ..."Verbose", true ...)
net = trainNetwork(train_data(:, 1), train_data(:, 2), layers, opts);

训练过程曲线

4. 预测模型测试

使用测试数据集进行预测并计算均方根误差(RMSE)。此外,从序列的RMSE绘制直方图,其显示与RMSE矩阵的特定值相对应的误差量。最后,绘制了测试数据集中第一个序列的地面真相和预测,以查看两者之间的差异。

test_preds = predict(net, test_data(:, 1));rmse = zeros(size(test_preds, 1), 1);
for i = 1:size(test_preds,1)rmse(i) = sqrt(mean((test_preds{i} - test_data{i, 2}).^2,"all"));
end
mrmse = mean(rmse);
clear ifigure
histogram(rmse)
xlabel("RMSE")
ylabel("Frequency")
title("Test Mean RMSE := " + num2str(mrmse))

tbl1 = table(test_data{1, 2}(1, :)', test_data{1, 2}(2, :)', test_data{1, 2}(3, :)', 'VariableNames', ["Zone 1", "Zone 2", "Zone 3"]);
tbl2 = table(test_preds{1}(1, :)', test_preds{1}(2, :)', test_preds{1}(3, :)', 'VariableNames', ["Zone 1", "Zone 2", "Zone 3"]);
figure
stackedplot(tbl1)
title( "真实值")
stackedplot(tbl2)
title( "预测值")
save powerConsumptionNet.mat

博客中涉及一些网络资源,如有侵权请联系删除。

该项目实现过程中的不足之处:没有利用天气特征进行负荷预测(后续优化)

长短时记忆网络(LSTM)负荷预测项目(matlab)相关推荐

  1. 小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

    小常识10:  循环神经网络(RNN)与长短时记忆网络LSTM简介. 本文目的:在计算机视觉(CV)中,CNN 通过局部连接/权值共享/池化操作/多层次结构逐层自动的提取特征,适应于处理如图片类的网格 ...

  2. 【深度学习理论】(7) 长短时记忆网络 LSTM

    大家好,今天和各位分享一下长短时记忆网络 LSTM 的原理,并使用 Pytorch 从公式上实现 LSTM 层 上一节介绍了循环神经网络 RNN,感兴趣的可以看一下:https://blog.csdn ...

  3. 深度学习(7) - 长短时记忆网络(LSTM)

    长短时记忆网络是啥 我们首先了解一下长短时记忆网络产生的背景.回顾一下零基础入门深度学习(5) - 循环神经网络中推导的,误差项沿时间反向传播的公式: 我们可以根据下面的不等式,来获取的模的上界(模可 ...

  4. 长短时记忆神经网络python代码_零基础入门深度学习(6) - 长短时记忆网络(LSTM)

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  5. 深度学习之长短时记忆网络(LSTM)

    本文转自<零基础入门深度学习>系列文章,阅读原文请移步这里 之前我们介绍了循环神经网络以及它的训练算法.我们也介绍了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖 ...

  6. 长短时记忆网络(LSTM)的训练

    长短时记忆网络的训练 熟悉我们这个系列文章的同学都清楚,训练部分往往比前向计算部分复杂多了.LSTM的前向计算都这么复杂,那么,可想而知,它的训练算法一定是非常非常复杂的.现在只有做几次深呼吸,再一头 ...

  7. 长短时记忆网络LSTM

    网络介绍 长短时记忆网络(Long short time memory network, LSTM)是RNN的重要变体,解决了RNN无法长距离依赖的问题,同时缓了RNN的梯度爆炸问题.LSTM由遗忘门 ...

  8. 长短时记忆网络(LSTM)部分组件(六)

    在前面的几篇文章中试着实现了CNN,RNN的一些组件,这里继续学习LSTM,也是是实现部分组件,旨在学习其LSTM的原理. 具体参考: https://www.zybuluo.com/hanbingt ...

  9. 多元经验模态分解_交通运输|基于小波分解和长短时记忆网络的地铁进站量短时预测...

    山东科学 ›› 2019, Vol. 32 ›› Issue (4): 56-63.doi: 10.3976/j.issn.1002-4026.2019.04.008 摘要: 针对城市地铁车站进站客流 ...

  10. 深度学习代码实战演示_Tensorflow_卷积神经网络CNN_循环神经网络RNN_长短时记忆网络LSTM_对抗生成网络GAN

    前言 经过大半年断断续续的学习和实践,终于将深度学习的基础知识看完了,虽然还有很多比较深入的内容没有涉及到,但也是感觉收获满满.因为是断断续续的学习做笔记写代码跑实验,所以笔记也零零散散的散落在每个角 ...

最新文章

  1. QT关于使用MSVC之后,之前用MGW编译代码,用这个GDB调试器出现error
  2. 【代码】ReentrantLock使用tryLock进行尝试锁定
  3. 更新整理本人全部博文中提供的代码与工具(Java,2014.09)
  4. c 窗体程序 mysql_C\C++开发MySQL程序简介(下)
  5. P1135 奇怪的电梯(BFS/DFS)
  6. CentOS7 设置主机名及IP映射
  7. NGUI之输入文本框的使用
  8. window 快捷键使用 + idear 编辑器使用
  9. python中的tab补全功能添加
  10. 在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)
  11. python 快速排名发包_百度发包快排【SEO超快速排名系统】 - 「黑酷SEO」
  12. php搞笑图片合成,PS教你怎么把照片做成搞笑的qq表情
  13. 神经网络的优缺点是什么,深度神经网络的优缺点
  14. 【光模块、光接口及光纤知识】
  15. Android inflate解析
  16. 英语发音规则---字母组合ou的发音规律
  17. STM32L071 Flash写入的数据进行CRC-CCITT校验
  18. mysql increment_mysql中auto_increment用法详解
  19. 手机游戏盗版现状与保护方案研究分析
  20. android埋点,Android自动埋点的一种实现

热门文章

  1. 基于知识图谱的问答系统v1.0
  2. Centos7中查看IP命令
  3. delphiXE关于线程和多线程、线程的同步与异步执行
  4. Redis缓存一致性问题解决方案
  5. docker命令,一些常用的docker命令
  6. netstat -i FLG含义
  7. 发送短信验证码到手机(阿里大于平台) java
  8. python文件读写操作
  9. 拼多多崛起背后的电商新版图
  10. Mac苹果电脑上有哪些好用的txt小说阅读器?