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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 基于LSTM神经网络的电力负荷预测(Python代码实现)

💥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.

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
199 10
|
7月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【8月更文挑战第1天】在当今科技飞速发展的时代,AI已成为日常生活中不可或缺的一部分。神经网络作为AI的核心,通过模拟人脑中的神经元连接方式处理复杂数据模式。利用Python及其强大的库TensorFlow,我们可以轻松构建神经网络模型。示例代码展示了如何建立一个含有两层隐藏层的简单神经网络,用于分类任务。神经网络通过反向传播算法不断优化权重和偏置,从而提高预测准确性。随着技术的进步,神经网络正变得越来越深、越来越复杂,能够应对更加艰巨的挑战,推动着AI领域向前发展。
71 2
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【9月更文挑战第12天】在当今科技飞速发展的时代,人工智能(AI)已深入我们的生活,从智能助手到自动驾驶,从医疗诊断到金融分析,其力量无处不在。这一切的核心是神经网络。本文将带领您搭乘Python的航船,深入AI的大脑,揭秘智能背后的秘密神经元。通过构建神经网络模型,我们可以模拟并学习复杂的数据模式。以下是一个使用Python和TensorFlow搭建的基本神经网络示例,用于解决简单的分类问题。
65 10
|
5月前
|
机器学习/深度学习 大数据 PyTorch
行为检测(一):openpose、LSTM、TSN、C3D等架构实现或者开源代码总结
这篇文章总结了包括openpose、LSTM、TSN和C3D在内的几种行为检测架构的实现方法和开源代码资源。
246 0
|
7月前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
155 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
117 9
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
122 0
|
7月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
95 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
7月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
91 2
|
7月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络不再是黑魔法!Python带你一步步拆解,让AI学习看得见
【8月更文挑战第3天】神经网络,曾被视为难以触及的黑魔法,现已在Python的助力下变得平易近人。以TensorFlow或PyTorch为“魔法杖”,仅需几行Python代码即可构建强大的AI模型。从零开始,我们将教导AI识别手写数字,利用经典的MNIST数据集。通过数据加载、预处理至模型训练与评估,每个步骤都如精心编排的舞蹈般清晰可见。随着训练深入,AI逐渐学会辨认每个数字,其学习过程直观展现。这不仅揭示了神经网络的奥秘,更证明了任何人都能借助Python创造AI奇迹,共同探索未来的无限可能。
72 2

热门文章

最新文章