首页 > 其他分享 >风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型

风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型

时间:2024-10-08 21:47:46浏览次数:10  
标签:EMD GRU 模型 Pytorch plt import 数据 size

往期精彩内容:

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较

全是干货 | 数据集、学习资料、建模资源分享!

拒绝信息泄露!VMD滚动分解 + Informer-BiLSTM并行预测模型-CSDN博客

风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客

风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客

风速预测(三)EMD-LSTM-Attention模型-CSDN博客

风速预测(四)基于Pytorch的EMD-Transformer模型-CSDN博客

风速预测(五)基于Pytorch的EMD-CNN-LSTM模型-CSDN博客

前言

LSTF(Long Sequence Time-Series Forecasting)问题是指在时间序列预测中需要处理长序列的情况。在实际应用中,时间序列可能会包含非常大量的数据点,在这种情况下,传统的时间序列预测模型可能会遇到一些挑战,因为处理长序列时会出现一些问题,例如:

  • 长期依赖性: 随着时间序列数据的增长,模型需要能够捕捉长期的依赖关系和趋势。

  • 计算复杂性: 针对长序列进行训练和预测通常需要更多的计算资源和时间。

  • 内存消耗: 长序列通常需要大量的内存来存储数据和模型参数,这可能会导致内存耗尽或者性能下降的问题。

在处理LSTF问题时,选择合适的窗口大小(window size)是非常关键的。选择合适的窗口大小可以帮助模型更好地捕捉时间序列中的模式和特征,为了提取序列中更长的依赖建模,本文把窗口大小提升到96,运用EMD-CNN-GRU并行模型来充分提取序列中的特征信息。

本文基于前期介绍的风速数据(文末附数据集),先经过经验模态EMD分解,然后通过数据预处理,制作和加载数据集与标签,最后通过Pytorch实现EMD-CNN-GRU并行模型对风速数据的预测。风速数据集的详细介绍可以参考下文:

风速预测(一)数据集介绍和预处理_比较准的风速预测网站-CSDN博客

1 风速数据EMD分解与可视化

1.1 导入数据

​​

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

# 读取已处理的 CSV 文件
df = pd.read_csv('wind_speed.csv' )
# 取风速数据
winddata = df['Wind Speed (km/h)'].tolist()
winddata = np.array(winddata) # 转换为numpy
# 可视化
plt.figure(figsize=(15,5), dpi=100)
plt.grid(True)
plt.plot(winddata, color='green')
plt.show()

1.2 EMD分解

​​​​​​


from PyEMD import EMD

# 创建 EMD 对象
emd = EMD()
# 对信号进行经验模态分解
IMFs = emd(winddata)

# 可视化
plt.figure(figsize=(20,15))
plt.subplot(len(IMFs)+1, 1, 1)
plt.plot(winddata, 'r')
plt.title("原始信号")

for num, imf in enumerate(IMFs):
    plt.subplot(len(IMFs)+1, 1, num+2)
    plt.plot(imf)
    plt.title("IMF "+str(num+1), fontsize=10)
# 增加第一排图和第二排图之间的垂直间距
plt.subplots_adjust(hspace=0.8, wspace=0.2)
plt.show()

2 数据集制作与预处理

2.1 先划分数据集,按照8:2划分训练集和测试集

2.2 设置滑动窗口大小为96,制作数据集

3 基于Pytorch的EMD-CNN-GRU并行模型预测

3.1 数据加载,训练数据、测试数据分组,数据分batch

# 加载数据
import torch
from joblib import dump, load
import torch.utils.data as Data
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
# 参数与配置
torch.manual_seed(100)  # 设置随机种子,以使实验结果具有可重复性
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 加载数据集
def dataloader(batch_size, workers=2):
    # 训练集
    train_set = load('train_set')
    train_label = load('train_label')
    # 测试集
    test_set = load('test_set')
    test_label = load('test_label')

    # 加载数据
    train_loader = Data.DataLoader(dataset=Data.TensorDataset(train_set, train_label),
                                   batch_size=batch_size, num_workers=workers, drop_last=True)
    test_loader = Data.DataLoader(dataset=Data.TensorDataset(test_set, test_label),
                                  batch_size=batch_size, num_workers=workers, drop_last=True)
    return train_loader, test_loader

batch_size = 64
# 加载数据
train_loader, test_loader = dataloader(batch_size)

3.2 定义EMD-CNN-GRU并行预测模型

注意:输入风速数据形状为 [64, 10, 96], batch_size=64,  维度10维代表10个分量,96代表序列长度(滑动窗口取值)。

3.3 定义模型参数


# 定义模型参数
batch_size = 64
input_len = 96   # 输入序列长度为96 (窗口值)
input_dim = 10    # 输入维度为10个分量
conv_archs = ((1, 32), (1, 64))   # CNN 层卷积池化结构  类似VGG
hidden_layer_sizes = [64, 128]  # GRU 层 结构
output_size = 1 # 单步输出

model = EMDCNNGRUModel(batch_size, input_len, input_dim, conv_archs, hidden_layer_sizes, output_size=1)  

# 定义损失函数和优化函数
model = model.to(device)
loss_function = nn.MSELoss()  # loss
learn_rate = 0.003
optimizer = torch.optim.Adam(model.parameters(), learn_rate)  # 优化器

3.4 模型训练

训练结果

采用两个评价指标:MSE 与 MAE 对模型训练进行评价,100个epoch,MSE 为0.00441,MAE  为 0.0002034,EMD-CNN-GRU并行模型预测效果良好,性能提升明显,适当调整模型参数,还可以进一步提高模型预测表现。通过CNN模型来处理输入的长窗口时间序列数据,能够有效地捕获局部模式和特征,同时把数据送入GRU网络来提取时序特征,最后把时序特征和空间特征进行融合。EMD-CNN-GRU并行模型效果明显,可见其性能的优越性。

注意调整参数:

  • 可以适当调整CNN中卷积池化的层数和维度,微调学习率;

  • 调整GRU网络层数和维度,增加更多的 epoch (注意防止过拟合)

  • 可以改变滑动窗口长度(设置合适的窗口长度)

3.5 结果可视化

代码、数据整理如下:

标签:EMD,GRU,模型,Pytorch,plt,import,数据,size
From: https://blog.csdn.net/2402_85668383/article/details/142770343

相关文章

  • (29-6-01)通过回测、ARIMA 和 GRU 预测股票价格:深度学习模型预测(1)
    29.8 深度学习模型预测对于股票市场这类序列数据,使用不考虑数据序列的模型进行预测可能会丢失数据中的重要信息。因此,在本项目中引入了递归神经网络(RNN),它能有效利用数据的序列信息进行预测。递归神经网络主要有三种类型:标准RNN、长短期记忆网络(LSTM)和门控递归单元(GRU)。标......
  • pytorch环境安装
    pytorch环境安装1.基础安装首先安装anaconda打开,进入base,输入命令,这里-n后跟的是环境名字,再往后是python版本,不要太高condacreate-npytorchpython=3.8安装的时候有按y的就按y创建成功后使用下面命令进入创建的环境condaactivatepytorch2.安装需要的库piplist......
  • to GGrun
    点击查看代码namespaceOctane{//nonterraeplusultradqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr#defineOCTANE//dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr#defineBUFFER_SIZE100000//dqrdqrdqrdqrdqrdqrdqrdqrdqrdqr#definelllonglong//dqr......
  • 在Windows平台使用源码编译和安装PyTorch3D指定版本
    最近在部署SyncTalk虚拟数字人项目时,需要安装很多依赖项,在执行到pipinstall--no-index--no-cache-dirpytorch3d-fhttps://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py38_cu113_pyt1121/download.html这一句命令时,安装PyTorch3D失败,输出如下信息:(synctalk)C......
  • GoogLeNet训练CIFAR10[Pytorch+训练信息+.pth文件]
    0引言GoogLeNet,它是一种深度卷积神经网络,由Google研究人员在2014年提出,用于图像识别任务。CIFAR-10是一个常用的图像识别数据集,包含10个类别,每个类别有6000张32x32的彩色图像。本文使用Pycharm及Pytorch框架搭建GoogLeNet神经网络框架,使用CIFAR10数据集训练模型。笔者查阅资......
  • 风速预测(五)基于Pytorch的EMD-CNN-LSTM模型
    往期精彩内容:时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较全是干货|数据集、学习资料、建模资源分享!拒绝信息泄露!VMD滚动分解+Informer-BiLSTM并行预测模型-CSDN博客风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客风速预测(二)基于Pytorch......
  • Pytorch-CNN轴承故障一维信号分类(二)
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客三十多个开源数据集|故障诊断再也不用担心数据集了!Python轴承故障诊断(一)短时傅里叶变换STFT-CSDN博客Python轴承故障诊断(二)连续小波变换CWT-CSDN博客......
  • 如何提高游戏本地化的质量使用QE门户网站Logrus IT
    高质量的游戏本地化是全球市场成功的关键。这尤其适用于AAA和AA级别的游戏,玩家在这些游戏中投入了大量资金,并期望从中获得完美的游戏体验。尽管公司做出了努力,但传统的质量控制方法并不总是能够防止所有错误和本地化不准确。让我们更详细地研究这个问题。企业面临哪些挑战游......
  • 【代码实现】opencv 高斯模糊和pytorch 高斯模糊
    wiki百科GaussianBlur,也叫高斯平滑,是在AdobePhotoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次。opencv实现opencv实现高斯滤波有两种方式,1、是使用自带的cv2.GaussianBlur,2、自己构造高斯kernel,然后调用cv......
  • pytorch线性/非线性回归拟合
    一、线性回归1.导入依赖库importnumpyasnpimportmatplotlib.pyplotaspltimporttorchfromtorchimportnn,optimfromtorch.autogradimportVariablenumpy:用来构建数据matplotlib.pyplot: 将构建好的数据可视化torch.nn:包含了torch已经准备好的层,激活函数、全......