基于LSTM神经网络的电力负荷预测(Python代码实现)

news2024/11/17 13:56:01

目录

💥1 概述

📚2 运行结果

🌈3 Python代码及数据

🎉4 参考文献


💥1 概述

前馈神经网络的输出只依赖当前输入,但是在文本、视频、语音等时序数据中,时序数据长度并不固定,前馈神经网络的输入输出维数不能任意更改,因此难以适应这类型时序数据的处理。短期电力负荷预测的输入与输出均为时间序列,其本质仍是基于先前元素的序列预测问题,为此需要采用与前馈神经网络不同的方法,进行短期电力负荷预测。
循环神经网络具有记忆功能,可提升网络性能。与前馈神经网络相比,循环神经网络具备可同时接受自身信息与其他神经元信息的神经元,更贴合生物神经网络结构,在文本等序列数据分析中有广泛应用。循环神经网络的参数学习随时间反向传播,错误信息前传递学习,建立长时间间隔的状态间依赖,支持序列数据的分析处理。但随着网络层数增多与时间加长,循环神经网络容易因梯度消失或爆炸问题,导致只能学习短距离依赖,无法解决长距离依赖问题。为了解决循环神经网络的长程依赖问题,在循环神经网络上添加门控机制,实现调度信息积累速度控制,这类方法被称之为基于门控的循环神经网络,例如LSTM长短期记忆网络。LSTM是一种基于RNN的改进模型,通过引入门和单元的概念,解决长距离依赖问题,具有比RNN更强的适应性。LSTM网络的单结构如图1所示。每个神经单元内部结构如图2所示。
每个LSTM神经单元都包含遗忘门、输入门和输出门三个门控结构,以控制数据有信息的换地。其中,遗忘门负责丢弃和保留上一个时刻的有效信息在C{C内,输入门将当前时刻有效信息存放在Ct内,输出门决定神经单元输出中C·的信息。
 

 与传统神经网络算法相比,LSTM网络具有更强的自适应学习能力,对复杂样本数据有更好的拟合效果。LSTM网络通过门控结构,有效避免了时间增加所导致的梯度消失的问题,且由于采用了三个输入值与两个输入值的当前时刻记忆单元,因此模型也具有更好的泛化能力。

📚2 运行结果

City AEP, model MLP, epoch 10, train_mse_loss 0.035387418246355606, [150s]
City AEP, model MLP, epoch 20, train_mse_loss 0.032379517520683396, [289s]
City AEP, model MLP, epoch 30, train_mse_loss 0.02896040348687034, [427s]
City AEP, model MLP, epoch 40, train_mse_loss 0.025020044269985046, [567s]
City AEP, model MLP, epoch 50, train_mse_loss 0.020603562772705936, [705s]
City AEP, model MLP, epoch 60, train_mse_loss 0.017132578714602234, [841s]
City AEP, model MLP, epoch 70, train_mse_loss 0.013568510578108438, [2662s]
City AEP, model MLP, epoch 80, train_mse_loss 0.010349302512148151, [2804s]
City AEP, model MLP, epoch 90, train_mse_loss 0.008659378628826875, [2966s]
City AEP, model MLP, epoch 100, train_mse_loss 0.007364045838703928, [3117s]
City AEP, model MLP, epoch 110, train_mse_loss 0.006385179391751687, [3279s]
City AEP, model MLP, epoch 120, train_mse_loss 0.005340989620046879, [3414s]
City AEP, model MLP, epoch 130, train_mse_loss 0.004808902484027372, [3553s]
City AEP, model MLP, epoch 140, train_mse_loss 0.004394962796536477, [3705s]
City AEP, model MLP, epoch 150, train_mse_loss 0.0043113342354722, [3850s]
City AEP, model MLP, epoch 160, train_mse_loss 0.00431272537663471, [4003s]
City AEP, model MLP, epoch 170, train_mse_loss 0.004233362978202817, [4165s]
City AEP, model MLP, epoch 180, train_mse_loss 0.0041272962850559015, [4320s]
City AEP, model MLP, epoch 190, train_mse_loss 0.004165695266514693, [4465s]
City AEP, model MLP, epoch 200, train_mse_loss 0.004172246530314611, [4606s]
City AEP, model MLP, epoch 210, train_mse_loss 0.0043414913436762344, [4760s]
City AEP, model MLP, epoch 220, train_mse_loss 0.00410465720831754, [4895s]
City AEP, model MLP, epoch 230, train_mse_loss 0.00419495751797829, [5028s]
City AEP, model MLP, epoch 240, train_mse_loss 0.004089633657502523, [5168s]
City AEP, model MLP, epoch 250, train_mse_loss 0.0042064220887487345, [5331s]
City AEP, model MLP, epoch 260, train_mse_loss 0.004085837542821748, [5491s]
City AEP, model MLP, epoch 270, train_mse_loss 0.004034197799847933, [5645s]

运行时间比较长。 

      for loss_type in ['mse', 'smoothl1loss']:
            args.loss_type = loss_type
            preds = pd.read_csv(args.save_res_dir + 'ele_' + args.loss_type + '_preds_' + args.model_name + '.csv')

            # 绘图
            plt.plot(preds[[args.city_name]].values.flatten()[::args.plot_gap], 'r', label='prediction')
            plt.plot(np.multiply(data_y.flatten()[::args.plot_gap], scalar), 'b', label='real')
            plt.legend(loc='best')
            plt.savefig(save_plot_dir + args.city_name + '_' + args.loss_type + '.jpg')
            # plt.show()
            plt.close()

部分代码:

#一、数据准备

datas = df1.values[:, 2]
print(datas.shape)

#归一化处理,这一步必不可少,不然后面训练数据误差会很大,模型没法用

max_value = np.max(datas)
min_value = np.min(datas)
scalar = max_value - min_value
datas = list(map(lambda x: x / scalar, datas))

#数据集和目标值赋值,dataset为数据,look_back为以几行数据为特征维度数量

def creat_dataset(dataset,look_back):
    data_x = []
    data_y = []
    for i in range(len(dataset)-look_back):
        data_x.append(dataset[i:i+look_back])
        data_y.append(dataset[i+look_back])
    return np.asarray(data_x), np.asarray(data_y) #转为ndarray数据

#以2为特征维度,得到数据集

dataX, dataY = creat_dataset(datas,2)

train_size = int(len(dataX)*0.7)

x_train = dataX[:train_size] #训练数据
y_train = dataY[:train_size] #训练数据目标值

x_train = x_train.reshape(-1, 1, 2) #将训练数据调整成pytorch中lstm算法的输入维度
y_train = y_train.reshape(-1, 1, 1)  #将目标值调整成pytorch中lstm算法的输出维度

 #将ndarray数据转换为张量,因为pytorch用的数据类型是张量
#一、数据准备

datas = df1.values[:, 2]
print(datas.shape)

#归一化处理,这一步必不可少,不然后面训练数据误差会很大,模型没法用

max_value = np.max(datas)
min_value = np.min(datas)
scalar = max_value - min_value
datas = list(map(lambda x: x / scalar, datas))

#数据集和目标值赋值,dataset为数据,look_back为以几行数据为特征维度数量

def creat_dataset(dataset,look_back):
    data_x = []
    data_y = []
    for i in range(len(dataset)-look_back):
        data_x.append(dataset[i:i+look_back])
        data_y.append(dataset[i+look_back])
    return np.asarray(data_x), np.asarray(data_y) #转为ndarray数据

#以2为特征维度,得到数据集

dataX, dataY = creat_dataset(datas,2)

train_size = int(len(dataX)*0.7)

x_train = dataX[:train_size] #训练数据
y_train = dataY[:train_size] #训练数据目标值

x_train = x_train.reshape(-1, 1, 2) #将训练数据调整成pytorch中lstm算法的输入维度
y_train = y_train.reshape(-1, 1, 1)  #将目标值调整成pytorch中lstm算法的输出维度

 #将ndarray数据转换为张量,因为pytorch用的数据类型是张量

🌈3 Python代码及数据

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]刘海峰,王艳如.基于LSTM的短期电力负荷预测算法研究[J].现代信息科技,2021,5(23):40-42+47.DOI:10.19850/j.cnki.2096-4706.2021.23.011.

[2]陈振宇,杨斌,阮文俊,沈杰,吴丽莉.基于LSTM神经网络的短期电能负荷预测[J].电力大数据,2021,24(04):8-15.DOI:10.19317/j.cnki.1008-083x.2021.04.002.

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

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

相关文章

我对排序算法的理解

排序算法一直是一个很困惑我的问题,早在刚开始接触 数据结构的时候,这个地方就很让我不解。就是那种,总是感觉少了些什么的感觉。一开始,重新来过,认真来学习这一部分,也总是学着学着就把概念记住了。过了一…

词典项目练习

思维导图 客户端 #include "head.h" //用户提示界面 void help_info1() {printf("\t-----------------------------------------------\n");printf("\t| HENRY 在线辞典 |\n");printf("\t|版本:0.0.1 …

官方实锤!AMD真的已经有了大小核:不搞Intel那一套

Intel 12代酷睿开始引入大小核混合架构,多核跑分提升立竿见影,在游戏、渲染等场景中也有很好的辅助作用,但因为大核心、小核心基于完全不同的架构,需要复杂的系统、软件调度配合,也直接导致失去了AVX-512指令集。 AMD也…

解决多线程环境下单例模式同时访问生成多个实例

如何满足单例:1.构造方法是private、static方法、if语句判断 ①、单线程 Single类 //Single类,定义一个GetInstance操作,允许客户访问它的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例 public class LazySi…

浅析hooks,复杂前端业务解题之道

hooks 大势所趋 2019年年初,react 在 16.8.x 版本正式具备了 hooks 能力,同年6月;尤雨溪在 vue/github-issues 里提出了关于 vue3 Component API 的提案(vue hooks的基础)。在Vue3的组合式API出现后,githu…

VS2017配置Qt开发环境

VS2017配置Qt开发环境 安装Qt5.12.11安装Qt插件在VS2017中进行设置参考教程 安装Qt5.12.11 安装Qt插件 在VS2017中进行设置 参考教程 # Qt下载地址 https://download.qt.io/ # Qt安装 https://blog.csdn.net/jjxcsdn/article/details/125432165?spm1001.2014.3001.5506 # VS2…

【LeetCode】解码方法(动态规划)

解码方法 题目描述算法流程编程代码代码优化 链接: 解码方法 题目描述 算法流程 编程代码 class Solution { public:int numDecodings(string s) {int n s.size();vector<int> dp(n);dp[0] s[0] ! 0;if(n 1) return dp[0];if(s[1] < 9 && s[1] > 1) d…

Packet Tracer – 使用 TFTP 服务器升级思科 IOS 映像。

Packet Tracer – 使用 TFTP 服务器升级思科 IOS 映像。 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 F0/0 192.168.2.1 255.255.255.0 不适用 R2 G0/0 192.168.2.2 255.255.255.0 不适用 S1 VLAN 1 192.168.2.3 255.255.255.0 192.168.2.1 TFTP …

Neo4j文档阅读笔记-Installation and Launch Guide

安装&#xff08;Windows&#xff09; ①找到下载好的Neo4j Desktop文件&#xff0c;然后双击进行安装&#xff1b; ②安装Neo4j Desktop根据下一步进行安装。 启动 ①激活 打开Neo4j Desktop应用程序后&#xff0c;将激活码输入到“Activation Key”窗口中。 ②创建数据库…

牛客网Verilog刷题——VL44

牛客网Verilog刷题——VL44 题目题目解析答案 题目 如图所示为两种状态机中的一种&#xff0c;请根据状态转移图写出代码&#xff0c;状态转移线上的0/0等表示的意思是过程中data/flag的值。 要求&#xff1a; 1、 必须使用对应类型的状态机 2、 使用二段式描述方法 注意rs…

远程医疗技术的变革

目录 1.远程医疗的概念 2.远程医疗的发展历史 3.远程医疗的靠谱性 4.远程医疗的潜在危害 1.远程医疗的概念 远程医疗是一种通过通信技术&#xff0c;使医生和患者能够在不同地点进行医疗咨询和治疗的形式。它利用视频通话、电话、在线聊天和其他远程通信工具来实现远程诊断…

自定义一个仿拼多多地址选择器

前言 做了一个仿拼多多的地址选择器&#xff0c;但是与拼多多实现方法有些出入&#xff0c;大体效果是差不多的。废话不多说&#xff0c;先上一张效果动图&#xff1a; 开始 先说说本文的一些概念。地区级别&#xff1a;就是比如省级&#xff0c;市级&#xff0c;县级&#x…

理解复杂系统的关键:耐心

理解复杂系统的关键&#xff1a;耐心 复杂系统本质上是多面的、复杂的。它们通常并非被设计成一瞬间就能理解的。这对于自然发生的系统&#xff0c;如生态系统&#xff0c;和人类设计的系统&#xff0c;如高级软件或机械&#xff0c;都是适用的。这些系统是由多个组件混合而成…

【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用

目录 前言&#xff1a; 一、腾讯云 Cloud Studio介绍&#xff1a; 1、接近本地 IDE 的开发体验 2、多环境可选&#xff0c;或连接到云主机 3、随时分享预览效果 4、兼容 VSCode 插件 5、 AI代码助手 二、腾讯云Cloud Studio项目实践&#xff08;3D家具个性化定制应用&…

牛客网Verilog刷题——VL42

牛客网Verilog刷题——VL42 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器&#xff0c;比如说8.7分频的时钟信号&#xff0c;注意rst为低电平复位。提示&#xff1a;其实本质上是一个简单的数学问题&#xff0c;即如何使用最小公倍数得到时钟周期的分别频比。设小…

一夜卷走220万美元

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在「刘教链内参」发表了《内参&#xff1a;对传国内某DAO组织被刑事立案一事的分析》&#xff0c;欢迎关注公众号「刘教链内参」并阅读。 --- 隔夜比特币继续在29k上方盘旋。 表面的百无聊赖之下&#xff0c;各种土狗…

隐私保护之隐私信息检索

【引子】用户的隐私保护涉及多个方面&#xff0c;用户行为的隐私保护更是一个难点。周末读了一篇论文&#xff0c;https://cacm.acm.org/magazines/2010/4/81501-private-information-retrieval/fulltext&#xff0c;涉及了很多数学上的方法和概念&#xff0c;很是费劲&#xf…

Python--matplotlib基础绘图

前言 本章来说一下绘图&#xff0c;毕竟在软硬件行业&#xff0c;设备端的日志有了&#xff0c;前面也讲了抽取数据&#xff0c;怎么能不绘图呢。 在工作中&#xff0c;我也是经常会遇到研发有这样的需求&#xff0c;把数据整理出来&#xff0c;做成图&#xff0c;便于分析BUG。…

类变量和类方法

类变量和类方法 引入 思考&#xff1a;有一群小孩在玩堆雪人&#xff0c;不时有新的小孩加入&#xff0c;请问如何知道现在有多少小孩在玩&#xff1f; 静态变量内存分析 1、静态变量被对象共享 2、静态变量可能在堆中&#xff0c;也可能在方法区的静态域中&#xff0c;这…

Python中的类和实例是什么意思

目录 python中的类是什么 python中的实例是什么 python中的类和实例有什么区别 总结 python中的类是什么 在Python中&#xff0c;类是一种用于创建对象的蓝图或模板。类定义了对象的属性和方法。对象是类的实例&#xff0c;它拥有类定义的属性和方法。 通过定义类&#xff…