Transformer实现风电功率预测,python预测全家桶

【python量化】将Transformer模型用于股票价格预测 前言 下面的这篇文章主要教大家如何搭建一个基于Transformer的简单预测模型,并将其用于股票价格预测当中。原代码在文末进行获取。 1、Transformer模型 Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。这篇文章的目的主要是将带大家通过Pytor 阅读详情
AI摘要

本文详细介绍使用Transformer模型进行预测的Python代码实现,针对光伏、负荷数据的特性,利用Transformer编码器挖掘时间序列中的长短期依赖关系,提高预测精度。文中提供了一个包含多特征输入和多步预测的模型实例,并展示了预测结果。

截止到本期,一共发了7篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下:

1.终于来了!python机器学习预测全家桶

2.机器学习预测全家桶-Python,一次性搞定多/单特征输入,多/单步预测!最强模板!

3.机器学习预测全家桶-Python,新增CEEMDAN结合代码,大大提升预测精度!

4.机器学习预测全家桶-Python,新增VMD结合代码,大大提升预测精度!

5.Python机器学习预测+回归全家桶,再添数十种回归模型!这次千万别再错过了!

6.Python机器学习预测+回归全家桶,新增TCN,BiTCN,TCN-GRU,BiTCN-BiGRU等组合模型预测

7.调用最新mealpy库,实现215个优化算法优化CNN-BiLSTM-Attention,电力负荷预测


今天再更新一期关于Transformer预测的代码。

一、Transformer 模型概述

Transformer 作为一种创新的神经网络结构,深受欢迎。采用 Transformer 编码器对光伏、负荷数据特征间的复杂关系以及时间序列中的长短期依赖关系进行挖掘,可以提高光伏功率、负荷预测的准确性。Transformer 编码器一般由多个编码器层堆叠而成,具体架构如图所示。每个编 码器层包括注意力子层和前馈神经网络子层,其中注意力子层包括多头自注意力机制和残差连接与层归一化,前馈神经网络子层包括前馈神经网络和残差连接与层归一化。关于Transformer模型介绍网上有很多博主都讲解的不错,本期主要为代码实现。

46c9e9a7b0268946f2fa458a6d366306.png

Transformer架构

本期新增模型:Transformer 模型

Transformer 模型在小数据集上往往会表现出过拟合的现象,因此本期代码训练数据较大,设置了3万个样本,其中90%作为训练集,10%作为测试集。

以《风电场功率预测.xlsx》为例进行介绍。数据格式如下:

097e7322911c551da033c6dacf6ce01c.png

设置网络为多特征输入,多步预测。采用前10个历史时刻的特征值预测未来2天的功率值。(当然你也可以改为其他任何你想改的,比如单特征、单步预测等,不会改的参考这篇文章:一次性搞定多/单特征输入,多/单步预测!最强模板!)

二、结果展示:

采用前10个历史时刻的特征值预测未来2个时刻的功率值。

第一步预测结果:

3bcc2ab3fb731edf2ded79a623525631.png

第二步预测结果:

7d40aa6b4cf3b5421496c8859b7fd717.png

指标打印结果:

b3e11a2245c11d73339f7ac377ce9371.png

三、部分核心代码:

本期Transformer 模型采用torch框架构建。

# 定义 Transformer 模型
class TransformerModel(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim, num_layers, num_heads, dropout_prob):
        super(TransformerModel, self).__init__()


        # maxpool the input feature map/tensor to the transformer
        # a rectangular kernel worked better here for the rectangular input spectrogram feature map/tensor
        self.transformer_maxpool = nn.MaxPool2d(kernel_size=[1, 2], stride=[1, 2])


        # 初始化一个 TransformerEncoderLayer,用于构建 Transformer 模型的编码层
        self.encoder_layer = nn.TransformerEncoderLayer(
            d_model=input_dim, # input feature (frequency) dim after maxpooling 128*563 -> 64*140 (freq*time)
            nhead=num_heads, # self-attention layers in each multi-head self-attention layer in each encoder block
            dim_feedforward=hidden_dim,# 2 linear layers in each encoder block's feedforward network
            dropout=dropout_prob,
            activation = 'relu'  # ReLU: avoid saturation/tame gradient/reduce compute time
        )
        # 初始化一个 TransformerEncoder,用于构建整个 Transformer 编码器
        self.transformer_encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=num_layers)


        self.decoder = nn.Linear(input_dim, output_dim)
        self.init_weights()
        
# 设置超参数
input_dim = n_in*or_dim  #输入维度
output_dim = n_out  #输出维度
hidden_dim = 128  # Feed Forward层(Attention后面的全连接网络)的隐藏层的神经元数量。该值越大,网络参数量越多,计算量越大。
num_layers = 2  #层数
num_heads = 2    #多头注意力机制中,head的数量。注意力头数需要能被input_dim整除,否则会报错哦!
dropout_prob = 0.1  #dropout值。默认值为0.01
learning_rate = 0.001
num_epochs = 50
batch_size = 128
# seq_length = 10




# 初始化模型、损失函数和优化器
model = TransformerModel(input_dim, output_dim, hidden_dim, num_layers, num_heads, dropout_prob)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)


# 训练模型


X_TRAIN = torch.tensor(vp_train, dtype=torch.float32)
Y_TRAIN = torch.tensor(vt_train, dtype=torch.float32)


X_TEST = torch.tensor(vp_test, dtype=torch.float32)
Y_TEST = torch.tensor(vt_test, dtype=torch.float32)








for epoch in range(num_epochs):
    for i in range(0, n_train_number, batch_size):
        # zero out gradients for next pass
        # pytorch accumulates gradients from backwards passes (convenient for RNNs)
        optimizer.zero_grad()
        # 获取当前批次的训练数据




        batch_X = X_TRAIN[i:i+batch_size]
        batch_y = Y_TRAIN[i:i+batch_size]
        # 前向传播
        output = model(batch_X)
        # 计算损失
        loss = criterion(output.squeeze(), batch_y)
        # 反向传播及优化
        loss.backward()
        optimizer.step()






    # 打印当前训练损失
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

后续会继续更新一些其他模型……敬请期待!

机器学习python全家桶代码获取

点击下方下卡片获取!



全家桶pip包推荐版如下:

tensorflow~=2.15.0
pandas~=2.2.0
openpyxl~=3.1.2
matplotlib~=3.8.2
numpy~=1.26.3
keras~=2.15.0
mplcyberpunk~=0.7.1
scikit-learn~=1.4.0
scipy~=1.12.0
qbstyles~=0.1.4
prettytable~=3.9.0
vmdpy~=0.2
xgboost~=2.0.3
mealpy~=3.0.1
torch~=2.3.1

Transformer长期时序预测 transformer主要对输入特征进行编码、解码等,在这里原理并不过多的介绍,我们通过实例来完成transformer在时间序列上的预测应用。transformer预测的结果并不是单一的值,而是一个集合,预测出在该时间序列的可能值,然后再根据具体的业务需求完成最后的值,下图展示了结果中的某一样本的预测值。我们使用的是某一零件的耗用量,预测未来半年的该零件的耗用情况,时间维度是月,数据的示意图如下图所示。如上图所示,蓝色部分为训练数据,红色为测试部分。紧接着搭建训练样本、测试样本以及验证样本的数据加载器。 阅读详情

相关推荐

毕业设计 基于 transformer+lstm神经网络 用电器功率预测

数据介绍: 原始数据:用电器的功率检测数据泊尔尕恐怕可歌可泣-Dell文档类资源-优快云下载 时间戳 总功率 用电器1 用电器3 用电器7 其他功率 任务描述: 用 时间戳 、总功率、其他功率预测用电器1、用电器3、 用电器7 的功率 一共是30天的数据,前30天作为训练,最后一天作测试。输入 时间戳 、总功率、其他功率 预测用电器1、用电器3、 用电器7 的功率 。 代码: import json import numpy as np import pandas as pd fr.

3409

Python|基于Transformer的多变量风电功率预测研究

利用Transformer模型进行多变量风电功率预测的关键是构建一个能够处理多变量输入的Transformer模型。然后,利用Transformer模型的自注意力机制来学习变量之间的关系,从而进行预测。在风电功率预测领域,也可以利用Transformer模型来进行多变量风电功率预测研究。通过利用Transformer模型进行多变量风电功率预测研究,可以有效地利用多变量之间的关系,提高预测的准确性和鲁棒性,为风电场的运营和管理提供更准确的预测结果。python3,tensorfolw2.5框架实现。

2201_75535220的博客 274

升降机SEW MOVIDRIVE变频器设置

选择PO1 第2,3,9,13 位,点击“SendPA”Start reference,编码器反馈值为0(PI2/3 Actual position=0)提示:传送参考位置前请断开变频器安全24V电源,否则会弹出禁止修改提示框;提示:做这一步时,如果出现电机不能转动,或产生报警不能通过编码器匹配。下载配置的参数,提示:下载参数需要断开变频器的安全24V电源。编码器匹配通过后点击下一步,进入下图画面传送参考位置。1电机不能转动:a可能是由于变频器的安全24V未给。点击2.SEW总线扩展定位,定位块设置。

xdpcxq的专栏 5397

基于Transformer的多变量风电功率预测TF2

Transformer目前大火,作为一个合格的算法搬运工自然要跟上潮流,本文基于tensorflow2框架,构建transformer模型,并将其用于多变量的风电功率负荷预测。实验结果表明,相比与传统的LSTM,该方法精度更高,缺点也很明显,该方法需要更多的数据训练效果才能超过传统方法,而且占用很高的gpu资源(测试阶段,一次性输入所有测试集数据直接会OOM,需要分批输入)

qq_41043389的博客 7087

fNIRS 公开数据集整理

关注“心仪脑”查看更多脑科学知识的分享。 关键词:数据整理、fNIRS 之前我们向大家推送了 Public Neuroscience Dataset 系列主题的第一期:《EEG公开数据集》,我们同时意识到大家对于神经科学公开数据集的需求。本期是该系列主题的第二期,我们在延续第一期初衷的基础上,整理了功能性近红外光谱(fNIRS)技术的公开数据集。 fNIRS 是一种非侵入性、便携且价格低廉的光学神经成像技术,它具有可观的空间和时间分辨率。因fNIRS技术问世较EEG晚了许多,所以应用此技术开展研究发.

psybrain的博客 4272

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

学习笔记:基于Transformer的时间序列预测模型

基于Transformer的时间序列预测

xxt228的博客 3万+

Python 爬虫实战:拼多多商品评论情感分析(含词云生成与差评预警)

在电商行业竞争日益激烈的当下,商家对商品评论的分析需求愈发迫切。通过 Python 爬虫收集拼多多商品评论,并结合情感分析、词云可视化及差评预警技术,商家可精准洞察消费者反馈,优化商品与服务。本文将深度剖析从爬虫搭建到数据挖掘的关键环节,助力读者构建全流程电商评论分析系统。

yansideyucsdn的博客 1450
上一篇: SCI一区龙格库塔算法,原理详解,MATLAB代码免费获取
下一篇: 高创新模型,基于STFT-SWT-双流CNN-SVM的小样本轴承故障诊断方法,MATLAB代码
淘个代码_
博客等级 码龄7年 1万+粉丝 504原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值