AI实战:用Transformer建立数值时间序列预测模型开源代码汇总

用Transformer建立数值时间序列预测模型开源代码汇总

Transformer是一个利用注意力机制来提高模型训练速度的模型。,trasnformer可以说是完全基于自注意力机制的一个深度学习模型,因为它适用于并行化计算,和它本身模型的复杂程度导致它在精度和性能上都要高于之前流行的RNN循环神经网络。

记录一下Transformer做数值时间序列预测的一下开源代码

time_series_forcasting

  • 代码地址
    https://github.com/CVxTz/time_series_forecasting

Transformer-Time-Series-Forecasting

  • 代码地址
    https://github.com/nklingen/Transformer-Time-Series-Forecasting

    Article: https://natasha-klingenbrunn.medium.com/transformer-implementation-for-time-series-forecasting-a9db2db5c820
    szZack的博客

Transformer_Time_Series

  • 代码地址
    https://github.com/mlpotter/Transformer_Time_Series

  • 论文地址:
    Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting (NeurIPS 2019)
    https://arxiv.org/pdf/1907.00235.pdf

Non-AR Spatial-Temporal Transformer

  • Introduction
    Implementation of the paper NAST: Non-Autoregressive Spatial-Temporal Transformer for Time Series Forecasting (submitted to ICML 2021).

    We propose a Non-Autoregressive Transformer architecture for time series forecasting, aiming at overcoming the time delay and accumulative error issues in the canonical Transformer. Moreover, we present a novel spatial-temporal attention mechanism, building a bridge by a learned temporal influence map to fill the gaps between the spatial and temporal attention, so that spatial and temporal dependencies can be processed integrally.

    • 论文地址:https://arxiv.org/pdf/2102.05624.pdf
    • 代码地址
      https://github.com/Flawless1202/Non-AR-Spatial-Temporal-Transformer

Multidimensional-time-series-with-transformer

Transformer/self-attention for Multidimensional time series forecasting 使用transformer架构实现多维时间预测

Rerfer to https://github.com/oliverguhr/transformer-time-series-prediction

  • 代码地址
    https://github.com/RuifMaxx/Multidimensional-time-series-with-transformer
    szZack的博客

TCCT2021

Convolutional Transformer Architectures Complementary to Time Series Forecasting Transformer Models

Paper: TCCT: Tightly-Coupled Convolutional Transformer on Time Series Forecasting https://arxiv.org/abs/2108.12784

It has already been accepted by Neurocomputing:

Journal ref.: Neurocomputing, Volume 480, 1 April 2022, Pages 131-145

doi: 10.1016/j.neucom.2022.01.039

  • 代码地址
    https://github.com/OrigamiSL/TCCT2021-Neurocomputing-

Time_Series_Transformers

  • Introduction
    This directory contains a Pytorch/Pytorch Lightning implementation of transformers applied to time series. We focus on Transformer-XL and Compressive Transformers.

    Transformer-XL is described in this paper Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context by Zihang Dai*, Zhilin Yang*, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov (*: equal contribution) Preprint 2018.

    Part of this code is from the authors at https://github.com/kimiyoung/transformer-xl.

  • 代码地址
    https://github.com/Emmanuel-R8/Time_Series_Transformers

Multi-Transformer: A new neural network-based architecture for forecasting S&P volatility

Transformer layers have already been successfully applied for NLP purposes. This repository adapts Transfomer layers in order to be used within hybrid volatility forecasting models. Following the intuition of bagging, this repository also introduces Multi-Transformer layers. The aim of this novel architecture is to improve the stability and accurateness of Transformer layers by averaging multiple attention mechanism.

The article collecting theoretical background and empirical results of the proposed model can be downloaded here. The stock volatility models based on Transformer and Multi-Transformer (T-GARCH, TL-GARCH, MT-GARCH and MTL-GARCH) overcome the performance of traditional autoregressive algorithms and other hybrid models based on feed forward layers or LSTM units. The following table collects the validation error (RMSE) by year and model.

  • 代码地址
    https://github.com/EduardoRamosP/MultiTransformer

szZack的博客

一个很好的完整的例子

  • 代码
    https://github.com/OrigamiSL/TCCT2021-Neurocomputing-
    https://github.com/zhouhaoyi/Informer2020

    parser = argparse.ArgumentParser(description='[Informer] Long Sequences Forecasting')
    
    parser.add_argument('--model', type=str, required=True, default='informer',help='model of experiment, options: [informer, informerstack, informerlight(TBD)]')
    
    parser.add_argument('--data', type=str, required=True, default='ETTh1', help='data')
    parser.add_argument('--root_path', type=str, default='./data/ETT/', help='root path of the data file')
    parser.add_argument('--data_path', type=str, default='ETTh1.csv', help='data file')    
    parser.add_argument('--features', type=str, default='M', help='forecasting task, options:[M, S, MS]; M:multivariate predict multivariate, S:univariate predict univariate, MS:multivariate predict univariate')
    parser.add_argument('--target', type=str, default='OT', help='target feature in S or MS task')
    parser.add_argument('--freq', type=str, default='h', help='freq for time features encoding, options:[s:secondly, t:minutely, h:hourly, d:daily, b:business days, w:weekly, m:monthly], you can also use more detailed freq like 15min or 3h')
    parser.add_argument('--checkpoints', type=str, default='./checkpoints/', help='location of model checkpoints')
    
    parser.add_argument('--seq_len', type=int, default=96, help='input sequence length of Informer encoder')
    parser.add_argument('--label_len', type=int, default=48, help='start token length of Informer decoder')
    parser.add_argument('--pred_len', type=int, default=24, help='prediction sequence length')
    # Informer decoder input: concat[start token series(label_len), zero padding series(pred_len)]
    
    parser.add_argument('--enc_in', type=int, default=7, help='encoder input size')
    parser.add_argument('--dec_in', type=int, default=7, help='decoder input size')
    parser.add_argument('--c_out', type=int, default=7, help='output size')
    parser.add_argument('--d_model', type=int, default=512, help='dimension of model')
    parser.add_argument('--n_heads', type=int, default=8, help='num of heads')
    parser.add_argument('--e_layers', type=int, default=2, help='num of encoder layers')
    parser.add_argument('--d_layers', type=int, default=1, help='num of decoder layers')
    parser.add_argument('--s_layers', type=str, default='3,2,1', help='num of stack encoder layers')
    parser.add_argument('--d_ff', type=int, default=2048, help='dimension of fcn')
    parser.add_argument('--factor', type=int, default=5, help='probsparse attn factor')
    parser.add_argument('--distil', action='store_false', help='whether to use distilling in encoder, using this argument means not using distilling', default=True)
    parser.add_argument('--CSP', action='store_true', help='whether to use CSPAttention, default=False', default=False)
    parser.add_argument('--dilated', action='store_true', help='whether to use dilated causal convolution in encoder, default=False', default=False)
    parser.add_argument('--passthrough', action='store_true', help='whether to use passthrough mechanism in encoder, default=False', default=False)
    parser.add_argument('--dropout', type=float, default=0.05, help='dropout')
    parser.add_argument('--attn', type=str, default='prob', help='attention used in encoder, options:[prob, full, log]')
    parser.add_argument('--embed', type=str, default='timeF', help='time features encoding, options:[timeF, fixed, learned]')
    parser.add_argument('--activation', type=str, default='gelu',help='activation')
    parser.add_argument('--output_attention', action='store_true', help='whether to output attention in encoder')
    parser.add_argument('--do_predict', action='store_true', help='whether to predict unseen future data')
    
    parser.add_argument('--num_workers', type=int, default=0, help='data loader num workers')
    parser.add_argument('--itr', type=int, default=2, help='experiments times')
    parser.add_argument('--train_epochs', type=int, default=6, help='train epochs')
    parser.add_argument('--batch_size', type=int, default=16, help='batch size of train input data')
    parser.add_argument('--patience', type=int, default=3, help='early stopping patience')
    parser.add_argument('--learning_rate', type=float, default=0.0001, help='optimizer learning rate')
    parser.add_argument('--des', type=str, default='test',help='exp description')
    parser.add_argument('--loss', type=str, default='mse',help='loss function')
    parser.add_argument('--lradj', type=str, default='type1',help='adjust learning rate')
    parser.add_argument('--use_amp', action='store_true', help='use automatic mixed precision training', default=False)
    parser.add_argument('--inverse', action='store_true', help='inverse output data', default=False)
    
    parser.add_argument('--use_gpu', type=bool, default=True, help='use gpu')
    parser.add_argument('--gpu', type=int, default=0, help='gpu')
    parser.add_argument('--use_multi_gpu', action='store_true', help='use multiple gpus', default=False)
    parser.add_argument('--devices', type=str, default='0,1,2,3',help='device ids of multile gpus')
    

szZack的博客

  • 数据集
    https://github.com/zhouhaoyi/ETDataset
  • 23
    点赞
  • 216
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
股神--人工智能股票预测系统是专门为股票投资者发的一套全新的基于人工智能技术的股票趋势预测软件平台。该软件以基因演化算法(GP)为内核对股票交易历史数据进行自动建模和学习,挖掘出股票交易大数据中隐藏的行为规律,并以此为依据对下一个股票日的最高价和最低价的涨跌趋势进行预测分析。该软件能够帮助您了解何时进入股市,何时退出股市,并在最佳的时机买进或卖出股票,从而获取最大的利润和收益。 支持6种典型的股票类别:上证指数、上证A股、上证B股、深证指数、深证A股和深证B股。 精确的股票预测信息(如上涨、下跌或持平)和买卖推荐信息(如买入、卖出、持股以及买入价、卖出价等)。 基因演化算法参数支持用户自定义,默认设置为种群大小:30,杂交概率:0.8,变异概率:0.1,最大运行代数:1000。 支持批量操作,如股票批量评测、模型批量训练、股票批量预测、批量增加股票代码、批量添加/撤销我的股票池等。 对大多数股票而言,最高价与最低价的涨跌趋势预测准确度达60%-80%;对部分股票而言,预测准确度最高可达90%。 仅需简单的操作即可完成股票评测、智能选股、模型训练以及股票预测等功能。 系统主界面支持从云数据库和本地数据库自动更新最优股票预测信息。 支持流行的微软Windows操作系统,如Windows 98/Me/2000/XP/Vista/7。
以下是一个使用PyTorch Transformer进行数值时间序列预测的简单代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset # 定义Transformer模型 class TransformerModel(nn.Module): def __init__(self, input_dim, output_dim, hidden_dim, num_layers, num_heads): super(TransformerModel, self).__init__() self.encoder = nn.TransformerEncoder( nn.TransformerEncoderLayer(input_dim, num_heads, hidden_dim), num_layers) self.decoder = nn.Linear(input_dim, output_dim) def forward(self, x): x = self.encoder(x) x = self.decoder(x[:, -1, :]) # 只使用最后一个时间步的输出进行预测 return x # 定义自定义数据集类 class TimeSeriesDataset(Dataset): def __init__(self, data, seq_length): self.data = data self.seq_length = seq_length def __len__(self): return len(self.data) - self.seq_length def __getitem__(self, idx): return self.data[idx:idx+self.seq_length], self.data[idx+self.seq_length] # 准备数据 data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] # 示例数据 seq_length = 3 # 序列长度 dataset = TimeSeriesDataset(data, seq_length) dataloader = DataLoader(dataset, batch_size=1) # 初始化模型和优化器 input_dim = 1 # 输入维度 output_dim = 1 # 输出维度 hidden_dim = 32 # 隐藏层维度 num_layers = 2 # Transformer层数 num_heads = 4 # 多头注意力机制头数 model = TransformerModel(input_dim, output_dim, hidden_dim, num_layers, num_heads) criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型 num_epochs = 100 for epoch in range(num_epochs): for inputs, labels in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}") # 使用模型进行预测 with torch.no_grad(): future_input = torch.Tensor([6.0, 7.0, 8.0]) # 假设需要预测未来3个时间步的数据 future_input = future_input.unsqueeze(0).unsqueeze(-1) # 调整输入形状 future_predictions = model(future_input) print("Future Predictions:", future_predictions.squeeze().tolist()) ``` 这个示例中使用了一个简单的数值时间序列数据 `[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]`,使用Transformer模型进行预测。在训练过程中,使用均方误差(MSE)作为损失函数,并使用Adam优化器进行参数更新。最后,使用训练好的模型预测未来3个时间步的数据。请注意,这个示例是一个基本的框架,实际应用中可能需要进一步调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

szZack

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值