💥1 概述
基于CNN-GRU(convolutional neural networks-gate recurrent unit)神经网络的电力系统短期负荷预测方法。首先使用卷积神经网络(CNN)对负荷及气象数据进行卷积处理,以更好地提取数据新特征,增强输入数据与输出数据间的相关性。然后使用门控循环单元(GRU)实现短期负荷预测。使用某地区的负荷数据结合当地的气象数据,对CNN-GRU-Attention方法进行了测试。结果表明:与单独的CNN网络或GRU网络相比,CNN-GRU-Attention网络对电力系统短期负荷的预测误差更小,预测精度更高。
📚
2 运行结果
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
reshape (Reshape) (None, 1, 7, 1) 0
conv2d (Conv2D) (None, 1, 7, 32) 320
max_pooling2d (MaxPooling2D (None, 1, 7, 32) 0
)
dropout (Dropout) (None, 1, 7, 32) 0
reshape_1 (Reshape) (None, 1, 224) 0
gru (GRU) (None, 1, 10) 7080
gru_1 (GRU) (None, 1, 20) 1920
attention (Attention) (None, 50) 2400
dense (Dense) (None, 10) 510
dense_1 (Dense) (None, 1) 11
=================================================================
Total params: 12,241
Trainable params: 12,241
Non-trainable params: 0
_________________________________________________________________
None
Epoch 1/50
2022-11-15 20:40:42.293543: W tensorflow/core/grappler/costs/op_level_cost_estimator.cc:690] Error in PredictCost() for the op: op: "Softmax" attr { key: "T" value { type: DT_FLOAT } } inputs { dtype: DT_FLOAT shape { unknown_rank: true } } device { type: "CPU" vendor: "AuthenticAMD" model: "240" frequency: 3194 num_cores: 16 environment { key: "cpu_instruction_set" value: "SSE, SSE2" } environment { key: "eigen" value: "3.4.90" } l1_cache_size: 32768 l2_cache_size: 524288 l3_cache_size: 16777216 memory_size: 268435456 } outputs { dtype: DT_FLOAT shape { unknown_rank: true } }
2022-11-15 20:40:43.604200: W tensorflow/core/grappler/costs/op_level_cost_estimator.cc:690] Error in PredictCost() for the op: op: "Softmax" attr { key: "T" value { type: DT_FLOAT } } inputs { dtype: DT_FLOAT shape { unknown_rank: true } } device { type: "CPU" vendor: "AuthenticAMD" model: "240" frequency: 3194 num_cores: 16 environment { key: "cpu_instruction_set" value: "SSE, SSE2" } environment { key: "eigen" value: "3.4.90" } l1_cache_size: 32768 l2_cache_size: 524288 l3_cache_size: 16777216 memory_size: 268435456 } outputs { dtype: DT_FLOAT shape { unknown_rank: true } }
103/103 - 3s - loss: 0.0332 - mse: 0.0332 - val_loss: 0.0068 - val_mse: 0.0068 - 3s/epoch - 29ms/step
Epoch 2/50
103/103 - 0s - loss: 0.0038 - mse: 0.0038 - val_loss: 0.0011 - val_mse: 0.0011 - 380ms/epoch - 4ms/step
Epoch 3/50
103/103 - 0s - loss: 0.0021 - mse: 0.0021 - val_loss: 8.9063e-04 - val_mse: 8.9063e-04 - 380ms/epoch - 4ms/step
Epoch 4/50
103/103 - 0s - loss: 0.0017 - mse: 0.0017 - val_loss: 7.7933e-04 - val_mse: 7.7933e-04 - 390ms/epoch - 4ms/step
Epoch 5/50
103/103 - 0s - loss: 0.0015 - mse: 0.0015 - val_loss: 7.5322e-04 - val_mse: 7.5322e-04 - 380ms/epoch - 4ms/step
Epoch 6/50
103/103 - 0s - loss: 0.0014 - mse: 0.0014 - val_loss: 7.0502e-04 - val_mse: 7.0502e-04 - 370ms/epoch - 4ms/step
Epoch 7/50
103/103 - 0s - loss: 0.0013 - mse: 0.0013 - val_loss: 6.4338e-04 - val_mse: 6.4338e-04 - 380ms/epoch - 4ms/step
Epoch 8/50
103/103 - 0s - loss: 0.0012 - mse: 0.0012 - val_loss: 6.1803e-04 - val_mse: 6.1803e-04 - 370ms/epoch - 4ms/step
Epoch 9/50
103/103 - 0s - loss: 0.0011 - mse: 0.0011 - val_loss: 5.5700e-04 - val_mse: 5.5700e-04 - 380ms/epoch - 4ms/step
Epoch 10/50
103/103 - 0s - loss: 0.0011 - mse: 0.0011 - val_loss: 5.2479e-04 - val_mse: 5.2479e-04 - 370ms/epoch - 4ms/step
Epoch 11/50
103/103 - 0s - loss: 0.0010 - mse: 0.0010 - val_loss: 5.1472e-04 - val_mse: 5.1472e-04 - 407ms/epoch - 4ms/step
Epoch 12/50
103/103 - 0s - loss: 0.0010 - mse: 0.0010 - val_loss: 4.8988e-04 - val_mse: 4.8988e-04 - 404ms/epoch - 4ms/step
Epoch 13/50
103/103 - 0s - loss: 9.7950e-04 - mse: 9.7950e-04 - val_loss: 5.0468e-04 - val_mse: 5.0468e-04 - 390ms/epoch - 4ms/step
Epoch 14/50
103/103 - 0s - loss: 9.5678e-04 - mse: 9.5678e-04 - val_loss: 4.9064e-04 - val_mse: 4.9064e-04 - 448ms/epoch - 4ms/step
Epoch 15/50
103/103 - 0s - loss: 9.1728e-04 - mse: 9.1728e-04 - val_loss: 5.0738e-04 - val_mse: 5.0738e-04 - 374ms/epoch - 4ms/step
Epoch 16/50
103/103 - 0s - loss: 9.0497e-04 - mse: 9.0497e-04 - val_loss: 4.8773e-04 - val_mse: 4.8773e-04 - 386ms/epoch - 4ms/step
Epoch 17/50
103/103 - 0s - loss: 8.8163e-04 - mse: 8.8163e-04 - val_loss: 4.8866e-04 - val_mse: 4.8866e-04 - 391ms/epoch - 4ms/step
Epoch 18/50
103/103 - 0s - loss: 8.8587e-04 - mse: 8.8587e-04 - val_loss: 4.9860e-04 - val_mse: 4.9860e-04 - 378ms/epoch - 4ms/step
Epoch 19/50
103/103 - 0s - loss: 8.7227e-04 - mse: 8.7227e-04 - val_loss: 5.0278e-04 - val_mse: 5.0278e-04 - 417ms/epoch - 4ms/step
Epoch 20/50
103/103 - 0s - loss: 8.5672e-04 - mse: 8.5672e-04 - val_loss: 5.1483e-04 - val_mse: 5.1483e-04 - 427ms/epoch - 4ms/step
Epoch 21/50
103/103 - 0s - loss: 8.6189e-04 - mse: 8.6189e-04 - val_loss: 4.9968e-04 - val_mse: 4.9968e-04 - 380ms/epoch - 4ms/step
Epoch 22/50
103/103 - 0s - loss: 8.5941e-04 - mse: 8.5941e-04 - val_loss: 4.9605e-04 - val_mse: 4.9605e-04 - 375ms/epoch - 4ms/step
Epoch 23/50
103/103 - 0s - loss: 8.3976e-04 - mse: 8.3976e-04 - val_loss: 4.9938e-04 - val_mse: 4.9938e-04 - 372ms/epoch - 4ms/step
Epoch 24/50
103/103 - 0s - loss: 8.2392e-04 - mse: 8.2392e-04 - val_loss: 4.8102e-04 - val_mse: 4.8102e-04 - 380ms/epoch - 4ms/step
Epoch 25/50
103/103 - 0s - loss: 8.3040e-04 - mse: 8.3040e-04 - val_loss: 5.3633e-04 - val_mse: 5.3633e-04 - 376ms/epoch - 4ms/step
Epoch 26/50
103/103 - 0s - loss: 8.2367e-04 - mse: 8.2367e-04 - val_loss: 5.1988e-04 - val_mse: 5.1988e-04 - 381ms/epoch - 4ms/step
Epoch 27/50
103/103 - 0s - loss: 8.1775e-04 - mse: 8.1775e-04 - val_loss: 5.0360e-04 - val_mse: 5.0360e-04 - 375ms/epoch - 4ms/step
Epoch 28/50
103/103 - 0s - loss: 8.0505e-04 - mse: 8.0505e-04 - val_loss: 4.6806e-04 - val_mse: 4.6806e-04 - 373ms/epoch - 4ms/step
Epoch 29/50
103/103 - 0s - loss: 8.0057e-04 - mse: 8.0057e-04 - val_loss: 4.7476e-04 - val_mse: 4.7476e-04 - 369ms/epoch - 4ms/step
Epoch 30/50
103/103 - 0s - loss: 8.0176e-04 - mse: 8.0176e-04 - val_loss: 4.7907e-04 - val_mse: 4.7907e-04 - 370ms/epoch - 4ms/step
Epoch 31/50
103/103 - 0s - loss: 7.9466e-04 - mse: 7.9466e-04 - val_loss: 4.8413e-04 - val_mse: 4.8413e-04 - 380ms/epoch - 4ms/step
Epoch 32/50
103/103 - 0s - loss: 7.9054e-04 - mse: 7.9054e-04 - val_loss: 4.9138e-04 - val_mse: 4.9138e-04 - 376ms/epoch - 4ms/step
Epoch 33/50
103/103 - 0s - loss: 7.8007e-04 - mse: 7.8007e-04 - val_loss: 4.9920e-04 - val_mse: 4.9920e-04 - 376ms/epoch - 4ms/step
Epoch 34/50
103/103 - 0s - loss: 7.7809e-04 - mse: 7.7809e-04 - val_loss: 4.8480e-04 - val_mse: 4.8480e-04 - 380ms/epoch - 4ms/step
Epoch 35/50
103/103 - 0s - loss: 7.7086e-04 - mse: 7.7086e-04 - val_loss: 4.6018e-04 - val_mse: 4.6018e-04 - 389ms/epoch - 4ms/step
Epoch 36/50
103/103 - 0s - loss: 7.6884e-04 - mse: 7.6884e-04 - val_loss: 4.5810e-04 - val_mse: 4.5810e-04 - 374ms/epoch - 4ms/step
Epoch 37/50
103/103 - 0s - loss: 7.5240e-04 - mse: 7.5240e-04 - val_loss: 4.6063e-04 - val_mse: 4.6063e-04 - 381ms/epoch - 4ms/step
Epoch 38/50
103/103 - 0s - loss: 7.4910e-04 - mse: 7.4910e-04 - val_loss: 4.5822e-04 - val_mse: 4.5822e-04 - 368ms/epoch - 4ms/step
Epoch 39/50
103/103 - 0s - loss: 7.4235e-04 - mse: 7.4235e-04 - val_loss: 4.4666e-04 - val_mse: 4.4666e-04 - 385ms/epoch - 4ms/step
Epoch 40/50
103/103 - 0s - loss: 7.5361e-04 - mse: 7.5361e-04 - val_loss: 4.4947e-04 - val_mse: 4.4947e-04 - 371ms/epoch - 4ms/step
Epoch 41/50
103/103 - 0s - loss: 7.3891e-04 - mse: 7.3891e-04 - val_loss: 4.5411e-04 - val_mse: 4.5411e-04 - 380ms/epoch - 4ms/step
Epoch 42/50
103/103 - 0s - loss: 7.1854e-04 - mse: 7.1854e-04 - val_loss: 4.3896e-04 - val_mse: 4.3896e-04 - 379ms/epoch - 4ms/step
Epoch 43/50
103/103 - 0s - loss: 7.2564e-04 - mse: 7.2564e-04 - val_loss: 4.3702e-04 - val_mse: 4.3702e-04 - 378ms/epoch - 4ms/step
Epoch 44/50
103/103 - 0s - loss: 7.1769e-04 - mse: 7.1769e-04 - val_loss: 4.7473e-04 - val_mse: 4.7473e-04 - 382ms/epoch - 4ms/step
Epoch 45/50
103/103 - 0s - loss: 7.1356e-04 - mse: 7.1356e-04 - val_loss: 4.4865e-04 - val_mse: 4.4865e-04 - 378ms/epoch - 4ms/step
Epoch 46/50
103/103 - 0s - loss: 7.0446e-04 - mse: 7.0446e-04 - val_loss: 4.2275e-04 - val_mse: 4.2275e-04 - 384ms/epoch - 4ms/step
Epoch 47/50
103/103 - 0s - loss: 6.9736e-04 - mse: 6.9736e-04 - val_loss: 4.2445e-04 - val_mse: 4.2445e-04 - 380ms/epoch - 4ms/step
Epoch 48/50
103/103 - 0s - loss: 6.9928e-04 - mse: 6.9928e-04 - val_loss: 4.1869e-04 - val_mse: 4.1869e-04 - 374ms/epoch - 4ms/step
Epoch 49/50
103/103 - 0s - loss: 6.8223e-04 - mse: 6.8223e-04 - val_loss: 4.1971e-04 - val_mse: 4.1971e-04 - 370ms/epoch - 4ms/step
Epoch 50/50
103/103 - 0s - loss: 6.7743e-04 - mse: 6.7743e-04 - val_loss: 4.8369e-04 - val_mse: 4.8369e-04 - 383ms/epoch - 4ms/step
2022-11-15 20:41:02.847965: W tensorflow/core/grappler/costs/op_level_cost_estimator.cc:690] Error in PredictCost() for the op: op: "Softmax" attr { key: "T" value { type: DT_FLOAT } } inputs { dtype: DT_FLOAT shape { unknown_rank: true } } device { type: "CPU" vendor: "AuthenticAMD" model: "240" frequency: 3194 num_cores: 16 environment { key: "cpu_instruction_set" value: "SSE, SSE2" } environment { key: "eigen" value: "3.4.90" } l1_cache_size: 32768 l2_cache_size: 524288 l3_cache_size: 16777216 memory_size: 268435456 } outputs { dtype: DT_FLOAT shape { unknown_rank: true } }
Test RMSE: 189.232
Test MAPE: 1.764
Test R2: 0.981
Test MAE: 152.840
Process finished with exit code 0
🎉
3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]张立峰,刘旭.基于CNN-GRU神经网络的短期负荷预测[J].电力科学与工程,2020,36(11):53-57
[2]姚程文,杨苹,刘泽健.基于CNN-GRU混合神经网络的负荷预测方法[J].电网技术,2020,44(9):3416-3423
[3]高翱,李国玉,撖奥洋,周生奇,魏振,张智晟.基于Adam算法优化GRU神经网络的短期负荷预测模型[J].电子设计工程,2022,30(09):180-183+188.DOI:10.14022/j.issn1674-6236.2022.09.038.
[4]姚程文,杨苹,刘泽健.基于CNN-GRU混合神经网络的负荷预测方法[J].电网技术,2020,44(09):3416-3424.DOI:10.13335/j.1000-3673.pst.2019.2058.
🌈
4 Python代码实现及数据
3]高翱,李国玉,撖奥洋,周生奇,魏振,张智晟.基于Adam算法优化GRU神经网络的短期负荷预测模型[J].电子设计工程,2022,30(09):180-183+188.DOI:10.14022/j.issn1674-6236.2022.09.038.[4]姚程文,杨苹,刘泽健.基于CNN-GRU混合神经网络的负荷预测方法[J].电网技术,2020,44(09):3416-3424.DOI:10.13335/j.1000-3673.pst.2019.2058.部分理论来源于网络,如有侵权请联系删除。
3、相关技术
相比LSTM,使用
GRU
能够达到相当的效果,准确率不会差多少,并且相比之下
GRU
更容易进行训练,能够很大程度上提高训练效率,因此硬件资源有限时会更倾向于使用
GRU
。
GRU
结构图如下:
4、完整
代码
和步骤
此
代码
的依赖环境如下:
tensorflow==2.5.0
numpy==1.19.5
keras==2.6.0
matplotlib==3.5.2
————————————————
版权声明:本文为CSDN博主「AI信仰者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30803353/article/details/129108978
1.BP
神经网络
预测(
python
)
2.mlp多层感知机预测(
python
)
下边是基于
Python
的简单的BP
神经网络
预测,多输入多输出,下边是我的数据,红色部分预测蓝色
2,3行输入,第4行输出
3,4行输入,第5行输出
…以此类推
简单利索,直接上
代码
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sklearn.metrics
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层
实现
方法
,那能否能用
Python
代码
从零
实现
来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手
代码
,双管齐下!本课程详细讲解深度学习原理并进行
Python
代码
实现
深度学习网络。课程内容涵盖感知机、多层感知机、卷积
神经网络
、循环
神经网络
,并使用
Python
3及Numpy、Matplotlib从零
实现
上述
神经网络
。本课程还讲述了
神经网络
的训练
方法
与实践技巧,且开展了
代码
实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速
方法
im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及
Python
代码
的对照学习,摆脱框架而掌握深度学习底层
实现
原理与
方法
。本课程将给学员分享深度学习的
Python
实现
代码
。课程
代码
通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中! 备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用
Python
语言以及Numpy和Matplotlib库。相关课程链接如下:《
Python
编程的术与道:
Python
语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】
一、
GRU
概述
GRU
是 LSTM
神经网络
的一种效果很好的变体,
GRU
保持了 LSTM的效果同时又使得结构更加简单计算量更小,它较 LSTM网络的结构更加简单,而且效果也更好,因此也是当前非常流行的一种
神经网络
。
GRU
既然是 LSTM的变体,因此也是可以解决 RNN
神经网络
中的长依赖问题的。
GRU
把 LST...
### 回答1:
CNN
-
GRU
是一种深度学习模型,它结合了卷积
神经网络
(
CNN
)和门控循环单元(
GRU
)来处理时间序列数据。MATLAB是一种数学计算软件,可以用于
实现
机器学习算法。下面是关于
CNN
-
GRU
MATLAB
代码
的简要介绍:
首先,需要构建模型结构。可以使用MATLAB中的深度学习工具箱来创建
CNN
和
GRU
层,然后将它们组合成一个整体模型。模型的输入可以是多个带有时间维度的序列数据。例如,如果要将音频文件作为输入,可以将其划分为多个时间窗口,并将每个窗口的频谱数据作为一个输入序列。
其次,需要准备数据。MATLAB提供了用于加载和预处理数据的函数和工具。可以使用这些函数来读取音频数据,并将其转换为可以作为
CNN
输入的形式。还需要将标签数据进行编码,以便在训练模型时进行监督。
然后,可以使用MATLAB的训练函数来训练模型。可以选择不同的优化器和损失函数来优化模型。还可以将数据分为训练集和测试集,以评估模型的性能。
最后,可以使用已训练的模型来进行预测。可以将输入序列传递给模型,然后得到模型对应的输出。输出可以是分类结果、回归结果等等,具体取决于问题的类型和模型的设计。
总体来说,
实现
CNN
-
GRU
MATLAB
代码
需要掌握深度学习和MATLAB的相关知识和技能,需要结合具体问题进行设计和
实现
,并进行调试和优化,以得到最佳性能。
### 回答2:
CNN
-
GRU
是一种常用的深度学习模型,它结合了卷积
神经网络
和门控循环单元,适用于时序数据的建模和预测。Matlab是一种常用的科学计算和编程软件,具有强大的矩阵运算和图形化界面,可以用于
实现
CNN
-
GRU
模型的
代码
编写和调试。
实现
CNN
-
GRU
模型的Matlab
代码
需要分为几个模块,包括数据处理、网络搭建、训练和测试等步骤。具体的
实现
流程如下:
1. 数据处理:根据所需的数据格式和大小,将原始数据导入Matlab中,并按照训练集、验证集和测试集的比例划分数据集。同时,对数据进行归一化或标准化处理,以便于网络的训练和预测。
2. 网络搭建:根据
CNN
-
GRU
模型的结构设计,利用Matlab中Deep Learning Toolbox提供的函数和工具箱,搭建一个包含卷积层、池化层、
GRU
层和全连接层的网络模型。在搭建的过程中,需要设置每个层的参数和超参数,如卷积核大小、滑动步长、激活函数、
GRU
单元数等。
3. 训练模型:将数据集输入网络模型,并通过反向传播算法进行参数优化。在训练的过程中,需要选择一个合适的损失函数和优化器,如均方误差(MSE)和随机梯度下降(SGD),以最小化模型的预测误差。同时,可以设定一些训练参数,如批次大小、学习率和迭代次数等。
4. 测试模型:利用所训练好的模型,对测试集进行预测,并计算预测误差和准确率等指标。可以使用Matlab提供的评估函数,如confusionmat、mse和accuracy等。
总体来说,
实现
CNN
-
GRU
模型的Matlab
代码
需要充分了解模型原理和模块间的数据流程,同时运用Matlab中的函数和工具箱进行编码和调试。另外,针对不同的数据集和预测任务,也需要针对性地调整模型参数和超参数,以达到最优的性能和准确度。
### 回答3:
CNN
-
GRU
是一种用于图像和视频序列建模的
神经网络
模型,它由卷积
神经网络
(
CNN
)和门控循环单元(
GRU
)组成。它具有较强的表征学习能力,能够自动学习和提取图像和视频序列的特征,并用于各种任务,如分类、检测、分割和跟踪等。
在Matlab中,可以使用深度学习工具箱中的函数构建
CNN
-
GRU
模型。以下是构建
CNN
-
GRU
模型的步骤:
1. 创建图像输入层。使用imageInputLayer函数创建一个图像输入层,指定输入图像的大小和通道数。
2. 添加卷积层。使用convolution2dLayer函数添加卷积层,指定卷积核的大小,输出通道数和步幅等参数。可以添加多个卷积层,以提高模型的表征学习能力。
3. 添加池化层。使用maxPooling2dLayer函数添加池化层,指定池化窗口的大小和步幅等参数。可以添加多个池化层,以降低特征图的尺寸,减少参数数量。
4. 添加序列输入层。使用sequenceInputLayer函数创建一个序列输入层,指定输入序列的长度和特征通道数。
5. 添加
GRU
层。使用
gru
Layer函数添加
GRU
层,指定隐藏单元数量和dropout比率等参数。可以添加多个
GRU
层,以更好地建模序列数据。
6. 连接卷积和
GRU
层。使用sequenceFoldingLayer函数将卷积层的输出折叠成序列数据,并与序列输入层连接起来。再使用sequenceUnfoldingLayer函数将
GRU
层的输出展开成矩阵数据。
7. 添加全连接层和输出层。使用fullyConnectedLayer函数添加全连接层,指定输出的类别数。再使用softmaxLayer和classificationLayer函数添加softmax输出层和分类器。
8. 训练模型。使用trainNetwork函数训练模型,并使用validateNetwork函数验证模型的准确性。如果出现过拟合现象,可以使用正则化
方法
,如L2正则化和dropout等。
9. 测试模型。使用testNetwork函数测试模型的性能,并使用confusionmat函数绘制混淆矩阵。根据混淆矩阵,可以计算出模型的准确率、召回率和F1值等评价指标。
总之,使用Matlab构建
CNN
-
GRU
模型可以快速、简便地
实现
图像和视频序列建模,从而
实现
各种视觉任务的自动化处理和分析。