【ICLR 2023】时间序列预测实战Crossformer(附代码+数据集+详细讲解)

CrossFormer实战:使用CrossFormer实现图像分类任务(一) 摘要 CrossFormer是一种新型的视觉Transformer架构,旨在通过引入跨尺度注意力机制来提升计算机视觉任务的性能。该模型特别关注不同尺度特征之间的交互,解决了现有视觉Transformer在处理多尺度特征时的不足。 研究背景 在计算机视觉中,特征的多尺度性对于理解和处理图像至关重要。然而,许多现有的视觉Transformer模型未能有效利用这些跨尺度特征,主要原因包括: 输入嵌入在每一层都是相同尺度的,缺乏跨尺度特征。 一些模型为了降低计算成本,牺牲了小尺度特征。 核心创新 CrossF 阅读详情
AI摘要

本文详解ICLR 2023提出的Crossformer模型,聚焦多变量时间序列预测任务。核心包括维度-段式(DSW)嵌入、两阶段注意力(TSA)层和分层编码器-解码器(HED)结构,旨在显式建模跨时间与跨维度依赖。内容涵盖模型原理、PyTorch代码实现、ETTh数据集应用、参数配置、训练及预测流程,并指导适配个人数据集。

论文地址:官方论文地址

代码地址:官方代码地址


 一、本文介绍

本篇文章给大家带来的实战讲解是Crossformer模型,其是一个针对多变量时间序列预测的新型深度学习模型,发表ICLR 2023上并且排名前5%,所以这个模型的质量还是能够有一定保证的(但是我用官方的代码真的是Bug一堆改的让人头大)。Bug多是很多但是其效果还是可圈可点的,Crossformer的主要思想是:通过维度-段式嵌入技术将时间序列数据转换为二维向量数组,同时使用两阶段注意力层来高效地捕获这两种依赖关系。Crossformer采用分层编码器-解码器结构,在不同层次上利用信息进行预测。

 专栏目录:时间序列预测目录:深度学习、机器学习、融合模型、创新模型实战案例

专栏订阅: 时间序列预测专栏:基础知识+数据分析+机器学习+深度学习+Transformer+创新模型

目录

 一、本文介绍

二、网络结构讲解

2.1 Crossformer的主要思想

2.2、维度-段式(DSW)嵌入

2.3、两阶段注意力(TSA)层

2.4、分层编码器-解码器(HED)结构

2.5、模型代码

三、数据集

四、参数讲解 

五、模型训练

六、配置代码 

七、模型预测

八、训练个人数据集 

8.1、修改一

8.2、修改二

九、全文总结 


二、网络结构讲解

2.1 Crossformer的主要思想

这个模型是一种新的基于Transformer的模型,名为Crossformer,这个模型在今年的ICLR上提出,是一种专门为多变量时间序列(MTS)预测设计。 Crossformer的主要特点包括:

1. 维度-段式(DSW)嵌入:这种新颖的嵌入技术将多变量时间序列数据沿每个维度划分为段,将这些段嵌入到特征向量中。这种方法保持了时间和维度信息,有助于模型更好地捕捉MTS数据的固有结构。

2. 两阶段注意力(TSA)层:Crossformer使用TSA层来有效捕捉时间和不同维度之间的依赖性。对于MTS预测来说,这两个方面的依赖性都是重要的。

3. 分层编码器-解码器(HED)结构:模型使用HED来利用不同规模的信息进行预测。这种分层方法有助于更有效地理解和预测MTS数据。 论文表明,通过其独特的方法,Crossformer有效地捕捉了跨维度依赖性,这是现有基于Transformer的MTS预测模型中常常忽视的一个关键方面。通过在六个真实世界数据集上的广泛实验结果显示,Crossformer在性能上超越了以前的最先进模型,表明了其有效性和实际应用的潜力。 这项研究通过解决现有模型的局限性并引入创新技术以提高性能,对时间序列预测领域做出了重要贡献。

下面我分别来解释这个模型中的三种结构->


2.2、维度-段式(DSW)嵌入

DSW嵌入是Crossformer模型的一个关键特性,它的目的是更好地捕捉MTS(多变量时间序列)数据中的跨维度依赖关系。传统的基于Transformer的模型主要关注于捕捉时间跨度上的依赖(即跨时间依赖),而往往没有显式地捕捉不同变量间的依赖性(即跨维度依赖),这限制了它们的预测能力。

在DSW嵌入中,每个维度的时间序列数据点被分成一定长度的段。然后,每个段被嵌入到一个向量中,方法是使用线性投影加上位置嵌入。线性投影矩阵E和位置嵌入Epos都是可学习的。这样,每个嵌入后的向量hid表示一个时间序列的单变量段,最终得到一个二维向量数组H。在这个数组中,每个向量hid代表一段时间序列的一维切片。与其他针对MTS预测的Transformer模型不同,DSW嵌入显式地捕捉了跨维度依赖性​。

上图展示了Crossformer模型中维度-段式(DSW)嵌入的概念:

a) 由在ETH1数据集上训练的双层Transformer模型得出的自注意力分数热图,展示了多变量时间序列(MTS)数据倾向于被分段。

b) 描述了之前Transformer基础模型的嵌入方法,这些模型将同一时间步的不同维度的数据点嵌入到一个向量中。

c) 展示了Crossformer的DSW嵌入:在每个维度中,相邻的时间点形成一个段进行嵌入。

总结:这个图解清晰地说明了Crossformer如何通过其DSW嵌入机制来处理MTS数据,这是该模型与以前的方法不同的地方,它保留了时间序列数据在不同时间步的维度信息,以便更好地捕捉跨维度的依赖性。


2.3、两阶段注意力(TSA)层

两阶段注意力(TSA)层是Crossformer模型的一个核心组成部分,用于捕捉嵌入数组中的跨时间和跨维度依赖性。具体来说,通过DSW嵌入,输入数据被嵌入到一个二维向量数组中,以保留时间和维度的信息。然后,TSA层被设计出来,用于捕捉这些嵌入数组的依赖性。

以下是TSA层的工作流程说明:

1. 跨时间阶段:

  • TSA层接收一个二维数组 Z 作为输入,这个数组可能是维度-段式(DSW)嵌入的输出或下层TSA层的输出。
  • 对于每个维度,直接应用多头自注意力(MSA)机制来捕捉同一维度内不同时间段之间的依赖关系。
  • 这一阶段的计算涉及到层归一化(LayerNorm)和多层感知机(MLP),这有助于处理自注意力机制的输出。
  • 此阶段的计算复杂度为 O(DL^2) ,其中  L  是段的数量,D 是维度的数量。

2. 跨维度阶段:

  • 为了避免直接在维度之间应用MSA所带来的O(D^2)的计算复杂度,提出了一种路由机制。
  • 为每个时间步设置了一小组可学习的向量,称为“路由器”,用于从所有维度聚集信息。
  • 这些路由器随后将聚合的信息分发到各个维度,有效地建立了维度之间的全连接,而没有高复杂度。
  • 路由机制显著降低了复杂度,从O(D^2L)减少到O(DL),通过限制需要考虑的连接数量。
  • 与跨时间阶段类似,跨维度阶段也使用层归一化和MLP来处理路由机制的输出

这种两阶段的方法使Crossformer能够高效地处理多变量时间序列数据中的复杂依赖关系,通过区别对待时间轴和维度轴,尊重它们在数据结构中的独特作用。

上图显示了两阶段注意力(TSA)层的构造和功能:

a)TSA层的整体结构,包含了跨时间阶段(Cross-Time Stage)和跨维度阶段(Cross-Dimension Stage),用于处理 O(2cD)=O(D)。


2.4、分层编码器-解码器(HED)结构

分层编码器-解码器(HED)结构在Crossformer模型中用于多变量时间序列(MTS)预测,并能捕获不同尺度上的信息。HED结构包括编码器和解码器两个部分,它们按照以下步骤工作:

1. 编码器:

  • 除了第一层之外,编码器的每一层都会将时间域内两个相邻的向量合并,以获得更粗糙级别的表示。
  • 然后应用TSA层来捕获这个尺度上的依赖性。
  • 如果层数不是2的倍数,将进行填充以确保适当的长度。
  • 这个过程的输出表示为Zencl,它是编码器第 l 层的输出。
  • 编码器的每一层的复杂度是O(DT^2/L_{seg}^2)。

2. 解码器:

  • 解码器接收编码器输出的N+1个特征数组,并使用N+1层(索引为0到N)进行预测。
  • 第 l 层取第 l 层编码的数组作为输入,然后输出解码的二维数组。
  • 解码过程中也使用了TSA层和多头自注意力机制(MSA),构建编码器和解码器之间的连接。
  • 解码器的每一层的复杂度是O(D\tau(T+\tau)/L_{seg}^2)。

3. 最终预测:

  • 应用线性投影到解码器的每一层输出,以产生该层的预测。
  • 然后将所有层的预测相加,以得到最终的预测结果。

HED结构能够利用不同层次的信息进行预测,通过合并相邻的向量,并在不同的尺度上捕获依赖关系,最终通过解码器产生预测结果(其实看着好像考虑挺多但是结果我认为也就那样,对于时间序列领域我觉得往往简单才是真谛纯属个人见解哈哈)。

上图展示了Crossformer模型中分层编码器-解码器(HED)结构的架构,其中包含3层编码器层次。每个向量的长度表示它所覆盖的时间范围。编码器(左侧)利用TSA层和段合并来捕捉不同尺度上的依赖关系:上层的一个向量覆盖了更长的时间范围,从而在更粗糙的尺度上产生依赖性。解码器(右侧)通过在每个尺度上进行预测并将它们相加来制作最终的预测。


2.5、模型代码

大家可以根据上面流程来缕一缕下面的代码应该会有一定的收获。

class Crossformer(nn.Module):
    def __init__(self, data_dim, in_len, out_len, seg_len, win_size = 4,
                factor=10, d_model=512, d_ff = 1024, n_heads=8, e_layers=3, 
                dropout=0.0, baseline = False, device=torch.device('cuda:0')):
        super(Crossformer, self).__init__()
        self.data_dim = data_dim
        self.in_len = in_len
        self.out_len = out_len
        self.seg_len = seg_len
        self.merge_win = win_size

        self.baseline = baseline

        self.device = device

        # The padding operation to handle invisible sgemnet length
        self.pad_in_len = ceil(1.0 * in_len / seg_len) * seg_len
        self.pad_out_len = ceil(1.0 * out_len / seg_len) * seg_len
        self.in_len_add = self.pad_in_len - self.in_len

        # Embedding
        self.enc_value_embedding = DSW_embedding(seg_len, d_model)
        self.enc_pos_embedding = nn.Parameter(torch.randn(1, data_dim, (self.pad_in_len // seg_len), d_model))
        self.pre_norm = nn.LayerNorm(d_model)

        # Encoder
        self.encoder = Encoder(e_layers, win_size, d_model, n_heads, d_ff, block_depth = 1, \
                                    dropout = dropout,in_seg_num = (self.pad_in_len // seg_len), factor = factor)
        
        # Decoder
        self.dec_pos_embedding = nn.Parameter(torch.randn(1, data_dim, (self.pad_out_len // seg_len), d_model))
        self.decoder = Decoder(seg_len, e_layers + 1, d_model, n_heads, d_ff, dropout, \
                                    out_seg_num = (self.pad_out_len // seg_len), factor = factor)
        
    def forward(self, x_seq):
        if (self.baseline):
            base = x_seq.mean(dim = 1, keepdim = True)
        else:
            base = 0
        batch_size = x_seq.shape[0]
        if (self.in_len_add != 0):
            x_seq = torch.cat((x_seq[:, :1, :].expand(-1, self.in_len_add, -1), x_seq), dim = 1)

        x_seq = self.enc_value_embedding(x_seq)
        x_seq += self.enc_pos_embedding
        x_seq = self.pre_norm(x_seq)
        
        enc_out = self.encoder(x_seq)

        dec_in = repeat(self.dec_pos_embedding, 'b ts_d l d -> (repeat b) ts_d l d', repeat = batch_size)
        predict_y = self.decoder(dec_in, enc_out)


        return base + predict_y[:, :self.out_len, :]


三、数据集

本文是实战讲解文章,上面主要是简单讲解了一下网络结构比较具体的流程还是很复杂的涉及到很多的数学计算,下面我们来讲一讲模型的实战内容,第一部分是我利用的数据集。

我们本文用到的数据集是官方的ETTh1.csv(这个模型官方实验的数据集就是这个) ,该数据集是一个用于时间序列预测的电力负荷数据集,它是 ETTh 数据集系列中的一个。ETTh 数据集系列通常用于测试和评估时间序列预测模型。以下是 ETTh1.csv 数据集的一些内容:

数据内容:该数据集通常包含有关电力系统的多种变量,如电力负荷、价格、天气情况等。这些变量可以用于预测未来的电力需求或价格。

时间范围和分辨率:数据通常按小时或天记录,涵盖了数月或数年的时间跨度。具体的时间范围和分辨率可能会根据数据集的版本而异。 

以下是该数据集的部分截图->

​

四、参数讲解 

parser = argparse.ArgumentParser(description='CrossFormer')

parser.add_argument('--data', type=str, default='ETTh1', help='data')
parser.add_argument('--root_path', type=str, default='./datasets/', help='root path of the data file')
parser.add_argument('--data_path', type=str, default='ETTh1.csv', help='data file')  
parser.add_argument('--data_split', type=str, default='0.7,0.1,0.2',help='train/val/test split, can be ratio or number')
parser.add_argument('--checkpoints', type=str, default='./checkpoints/', help='location to store model checkpoints')

parser.add_argument('--in_len', type=int, default=96, help='input MTS length (T)')
parser.add_argument('--out_len', type=int, default=24, help='output MTS length (\tau)')
parser.add_argument('--seg_len', type=int, default=6, help='segment length (L_seg)')
parser.add_argument('--win_size', type=int, default=2, help='window size for segment merge')
parser.add_argument('--factor', type=int, default=10, help='num of routers in Cross-Dimension Stage of TSA (c)')

parser.add_argument('--data_dim', type=int, default=7, help='Number of dimensions of the MTS data (D)')
parser.add_argument('--d_model', type=int, default=256, help='dimension of hidden states (d_model)')
parser.add_argument('--d_ff', type=int, default=512, help='dimension of MLP in transformer')
parser.add_argument('--n_heads', type=int, default=4, help='num of heads')
parser.add_argument('--e_layers', type=int, default=3, help='num of encoder layers (N)')
parser.add_argument('--dropout', type=float, default=0.2, help='dropout')

parser.add_argument('--baseline', action='store_true', help='whether to use mean of past series as baseline for prediction', default=False)

parser.add_argument('--num_workers', type=int, default=0, help='data loader num workers')
parser.add_argument('--batch_size', type=int, default=32, help='batch size of train input data')
parser.add_argument('--train_epochs', type=int, default=20, help='train epochs')
parser.add_argument('--patience', type=int, default=3, help='early stopping patience')
parser.add_argument('--learning_rate', type=float, default=1e-4, help='optimizer initial learning rate')
parser.add_argument('--lradj', type=str, default='type1',help='adjust learning rate')
parser.add_argument('--itr', type=int, default=1, help='experiments times')

parser.add_argument('--save_pred', action='store_true', help='whether to save the predicted future MTS', 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')

args = parser.parse_args()

上面就是模型注册的所有代码,当然了模型还有一部分评估模型用的代码我就不讲解了,有兴趣不会的可以私聊问我或者评论区提问我也会回答。

参数名称参数类型参数讲解
0datastr模型的类型,可以理解为定制化的的东西量身特作的感觉,如果你想用个人数据集就需要自己量身定做一个,下面会介绍
1root_pathstr你输入文件的目录,填写到文件的目录即可。
2data_pathstr文件的名字这个和上面的进行组合。
3data_splitstr训练集测试集验证集划分的比例
4checkpointsstr模型训练结果保存的目录
5in_lenint观测器窗口,利用多少条数据预测未来的多少条数据
6out_lenint更大注意力的数据
7seg_lenint预测多少条未来的数据
8win_sizeint此参数用于指定分层编码器-解码器结构中段合并的窗口大小(前面有提到过)
9factorint此参数设置TSA层跨维度阶段的路由器数量(在TSA层文档中表示为c)
10data_dimint数据的特征数不算时间列!!!
11d_modelint模型的隐藏层单元数(根据数据来设置)
12d_ffint这个参数用来指定Transformer模型中多层感知机(MLP)的维度大小
13n_headsint注意力机制头数
14e_layersint解码层
15dropoutfloat丢弃的概率大家都会了估计
16baselinestore_true此参数用于决定是否使用过去序列的平均值作为预测的基线
17num_workersint线程windows设置为0
18train_epochsint训练的轮次
19patienceint早停机制的耐心度
20learning_ratefloat学习率
21lradjstr学习率更正的方案不用理会
22itrint实验次数填写1不发论文不用做对比。
23save_predstore_true是否保存预测值(测试集的)
24use_gpubool是否使用gpu
25gpuintgou编号
26use_multi_gpustore_true多GPU训练
27devicestr多个gpu型号


五、模型训练

当我们设置完所有的参数之后(根据你自己的数据集)就可以开始训练模型啦~

我们找到如下文件“main_crossformer.py”运行即可。


六、配置代码 

下面是我的该文件main_crossformer.py的完整内容,发给大家参考。

import argparse
import os
import torch

from cross_exp.exp_crossformer import Exp_crossformer
from utils.tools import string_split

parser = argparse.ArgumentParser(description='CrossFormer')

parser.add_argument('--data', type=str, default='Custom', help='data')
parser.add_argument('--root_path', type=str, default='./datasets/', help='root path of the data file')
parser.add_argument('--data_path', type=str, default='ETTh1.csv', help='data file')  
parser.add_argument('--data_split', type=str, default='0.7,0.1,0.2',help='train/val/test split, can be ratio or number')
parser.add_argument('--checkpoints', type=str, default='./checkpoints/', help='location to store model checkpoints')

parser.add_argument('--in_len', type=int, default=126, help='input MTS length (T)')
parser.add_argument('--out_len', type=int, default=32, help='output MTS length (\tau)')
parser.add_argument('--seg_len', type=int, default=24, help='segment length (L_seg)')
parser.add_argument('--win_size', type=int, default=2, help='window size for segment merge')
parser.add_argument('--factor', type=int, default=10, help='num of routers in Cross-Dimension Stage of TSA (c)')

parser.add_argument('--data_dim', type=int, default=7, help='Number of dimensions of the MTS data (D)')
parser.add_argument('--d_model', type=int, default=256, help='dimension of hidden states (d_model)')
parser.add_argument('--d_ff', type=int, default=512, help='dimension of MLP in transformer')
parser.add_argument('--n_heads', type=int, default=4, help='num of heads')
parser.add_argument('--e_layers', type=int, default=3, help='num of encoder layers (N)')
parser.add_argument('--dropout', type=float, default=0.2, help='dropout')

parser.add_argument('--baseline', action='store_true', help='whether to use mean of past series as baseline for prediction', default=False)

parser.add_argument('--num_workers', type=int, default=0, help='data loader num workers')
parser.add_argument('--batch_size', type=int, default=32, help='batch size of train input data')
parser.add_argument('--train_epochs', type=int, default=20, help='train epochs')
parser.add_argument('--patience', type=int, default=3, help='early stopping patience')
parser.add_argument('--learning_rate', type=float, default=1e-4, help='optimizer initial learning rate')
parser.add_argument('--lradj', type=str, default='type1',help='adjust learning rate')
parser.add_argument('--itr', type=int, default=1, help='experiments times')

parser.add_argument('--save_pred', action='store_true', help='whether to save the predicted future MTS', 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')

args = parser.parse_args()

args.use_gpu = True if torch.cuda.is_available() and args.use_gpu else False

if args.use_gpu and args.use_multi_gpu:
    args.devices = args.devices.replace(' ','')
    device_ids = args.devices.split(',')
    args.device_ids = [int(id_) for id_ in device_ids]
    args.gpu = args.device_ids[0]
    print(args.gpu)

data_parser = {
    'ETTh1':{'data':'ETTh1.csv', 'data_dim':7, 'split':[12*30*24, 4*30*24, 4*30*24]},
    'ETTm1':{'data':'ETTm1.csv', 'data_dim':7, 'split':[4*12*30*24, 4*4*30*24, 4*4*30*24]},
    'WTH':{'data':'WTH.csv', 'data_dim':12, 'split':[28*30*24, 10*30*24, 10*30*24]},
    'ECL':{'data':'ECL.csv', 'data_dim':321, 'split':[15*30*24, 3*30*24, 4*30*24]},
    'ILI':{'data':'national_illness.csv', 'data_dim':7, 'split':[0.7, 0.1, 0.2]},
    'Traffic':{'data':'traffic.csv', 'data_dim':862, 'split':[0.7, 0.1, 0.2]},
    'Custom': {'data': 'ETTh1.csv', 'data_dim': 7, 'split': [0.7, 0.1, 0.2]},
}
if args.data in data_parser.keys():
    data_info = data_parser[args.data]
    args.data_path = data_info['data']
    args.data_dim = data_info['data_dim']
    args.data_split = data_info['split']
else:
    args.data_split = string_split(args.data_split)

print('Args in experiment:')
print(args)

Exp = Exp_crossformer

for ii in range(args.itr):
    # setting record of experiments
    setting = 'Crossformer_{}_il{}_ol{}_sl{}_win{}_fa{}_dm{}_nh{}_el{}_itr{}'.format(args.data, 
                args.in_len, args.out_len, args.seg_len, args.win_size, args.factor,
                args.d_model, args.n_heads, args.e_layers, ii)

    exp = Exp(args) # set experiments
    print('>>>>>>>start training : {}>>>>>>>>>>>>>>>>>>>>>>>>>>'.format(setting))
    exp.train(setting)
    
    print('>>>>>>>testing : {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'.format(setting))
    exp.test(setting, args.save_pred)


七、模型预测

值得一提是,该代码来自于官方,官方并没有出预测的功能,本来我想给其加上的,但是我确实没有这个需求也不知道这个文章看的人多不多,所以如果大家有需要我是可以给官方代码补全的,所以大家有需要可以评论区催更。


八、训练个人数据集 

8.1、修改一

 训练个人数据集需要修改的地方主要有三处(只能保证大家跑起来),

parser.add_argument('--data', type=str, default='Custom', help='data')
parser.add_argument('--root_path', type=str, default='./datasets/', help='root path of the data file')
parser.add_argument('--data_path', type=str, default='ETTh1.csv', help='data file')  
parser.add_argument('--data_dim', type=int, default=7, help='Number of dimensions of the MTS data (D)')

这四个需要根据你自己的填写,其中data就随便设置一个名字,然后root_path,data_path前面参数讲解的地方以及将结果了,最后一个data_dim就是你的特征数注意不算时间列!!!! 

8.2、修改二

上面讲解了参数部分需要修改的,下面还有一部分需要修改。

data_parser = {
    'ETTh1':{'data':'ETTh1.csv', 'data_dim':7, 'split':[12*30*24, 4*30*24, 4*30*24]},
    'ETTm1':{'data':'ETTm1.csv', 'data_dim':7, 'split':[4*12*30*24, 4*4*30*24, 4*4*30*24]},
    'WTH':{'data':'WTH.csv', 'data_dim':12, 'split':[28*30*24, 10*30*24, 10*30*24]},
    'ECL':{'data':'ECL.csv', 'data_dim':321, 'split':[15*30*24, 3*30*24, 4*30*24]},
    'ILI':{'data':'national_illness.csv', 'data_dim':7, 'split':[0.7, 0.1, 0.2]},
    'Traffic':{'data':'traffic.csv', 'data_dim':862, 'split':[0.7, 0.1, 0.2]},
    'Custom': {'data': 'ETTh1.csv', 'data_dim': 7, 'split': [0.7, 0.1, 0.2]},
}

上面看我建立了一个custom这个就是我自己的数据集的,你可以根据你自己的数据集在下面建立一个,就可以了。 


九、全文总结 

 到此本文的正式分享内容就结束了,在这里给大家推荐我的时间序列专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的模型进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~),如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

(同时最近在研究各种顶会内容,专栏也会持续更新一段时间顶会的内容,大家如果想一起学习,发表论文的可以私信我)

 专栏回顾: 时间序列预测专栏——持续复习各种顶会内容——科研必备

如果大家有不懂的也可以评论区留言一些报错什么的大家可以讨论讨论看到我也会给大家解答如何解决!最后希望大家工作顺利学业有成!

crossformer模型详解及代码复现 例如,在一个包含多年电力消耗数据的实验中,使用分层架构的Crossformer模型在长期预测任务上的性能比传统方法提高了。例如,在一个包含多年电力消耗数据的实验中,使用分层架构的Crossformer模型在长期预测任务上的性能比传统方法提高了。在Crossformer模型的实现中,数据预处理是一个至关重要的步骤,直接影响模型的训练效果和最终预测精度。DSW嵌入通过一种独特的。这些数据预处理技术的组合使用,不仅丰富了训练数据的多样性,还能帮助模型更好地学习数据的本质特征,从而提高模型的泛化能力和预测性能。 阅读详情

相关推荐

项目-1.CROSSFORMER论文与代码解析(CrossFormer: A Versatile Vision Transformer Based on Cross-scale Attention)

CROSSFORMER[CV:图像分类、目标检测]1.资源链接1.1论文1.2代码2.论文解析2.0 摘要2.1 基本介绍2.2 背景2.3 本文模型2.3.1 Cross-Scale Embedding Layer(CEL)2.3.2 CrossFormer Block2.3.2.1长短距离注意力机制 (LSDA)2.3.2.2 Dynamic Position Bias(DPB)3.代码解析3.1下载之初3.2环境搭建3.2.0 下载数据集3.2.1图像分类3.2.1.1 环境配置3.2.1.2 修改代

bingokunkun的博客 4792

【ICLR 2023】 CrossFormer增强多元时间序列建模能力

一篇ICLR2023中,和Transformer做时间序列相关的论文。这篇文章提出了CrossFrormer,用来解决多元时间序列问题。CrossFromer主要的切入点在于,之前的Transformer更多的考虑是如何通过时间维度attention建立时序上的关系,而缺少面对多元时间序列预测时,对不同变量关系之间的刻画。这篇文章填补了这个空白,提出了时间维度、变量维度两阶段attention,尤...

AI蜗牛车 1万+

ICLR 2023 时间序列预测(Time series prediction)论文汇总

并且该模型可以参加更长的历史。时间分布的变化,随着时间的推移,潜在的动态变化,经常发生在现实世界的时间序列中,并对深度神经网络 (DNN) 提出了根本性的挑战。KNF 施加适当的归纳偏差以提高对分布变化的鲁棒性,既使用全局运算符来学习共享特征,又使用本地运算符来捕获不断变化的动态,以及专门设计的反馈回路,以随着时间的推移不断更新学习到的运算符以快速变化行为。我们的研究发现了一种新的攻击模式,它通过对少数其他时间序列的过去观察进行战略性的、稀疏的(不可察觉的)修改,对目标时间序列的预测产生负面影响。

qq_41300595的博客 3258

ICLR2023《Crossformer: Transformer Utilizing Cross-Dimension Dependency for Multivariate Time Series》

这是一篇ICLR2023 top 5%论文。

weixin_43994864的博客 7396

时间序列8个基准Baseline模型及其详细解读

分享过程中,我收获了不少素未谋面的研究者的鼓励,与大家留言交流的过程更受益匪浅,这是我未曾预料到的收获。是另一个线性模型的变体,它采用了不同的预处理方法。作者认为由于Transformer的自注意力机制是对称的(置换不变性),并且在计算注意力权重时不考虑序列中的位置信息,因此无法有效地捕捉时间序列中的时序依赖关系,导致时间信息的丢失。现有的基于 Transformer 的模型主要集中在建模时间依赖关系(跨时间依赖),但往往忽视了不同变量之间的依赖关系(跨维度依赖),而这对于 MTS 预测至关重要。

u010681011的专栏 1635

Crossformer时间序列预测:多变量交互与多尺度注意力机制详解

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势,广泛应用于金融、能源、交通等领域。其核心原理在于挖掘数据中的时序依赖关系,包括趋势、周期性和季节性。传统方法如ARIMA和LSTM在处理长序列和多变量复杂交互时面临挑战。Transformer架构通过自注意力机制能有效捕捉长期依赖,但计算复杂度高。Crossformer作为ICLR 2023的论文,创新性地提出了维度段嵌入(DSE)和两阶段注意力(TSA)机制,解决了多变量时间序列中变量间交叉依赖和多尺度周期性建模的难题。DSE模块

weixin_34417183的博客 430

探索Crossformer:多维时间序列预测的革新力量

???? 探索Crossformer:多维时间序列预测的革新力量 项目地址:https://gitcode.com/gh_mirrors/cr/Crossformer ???? 项目概览 在时间序列预测领域,每一次算法的进步都如同打开了一扇通往未来预测大门的关键钥匙。Crossformer,一项于2023年国际学习表征会议(ICLR)上发表的研究成果,正是这样一把关键的钥匙。它不仅精妙地捕捉了跨维度依赖关系,...

gitblog_00553的博客 1299

Crossformer实战:从零开始搭建多变量时间序列预测模型(附ETTh1数据集调参指南)

本文提供了从零开始搭建Crossformer多变量时间序列预测模型的实战指南,并附有详细的ETTh1数据集调参攻略。文章深入解析了Crossformer的核心设计,重点探讨了seg_len和win_size等关键参数对模型性能的影响,并分享了环境配置、训练调试及常见问题的解决方案,帮助开发者高效应用这一前沿深度学习模型。

weixin_29281915的博客 321

Crossformer实战:如何用ICLR 2023新模型搞定电力负荷预测(附ETTh1数据集调参指南)

本文深入解析了ICLR 2023提出的Crossformer模型在电力负荷预测中的应用,特别是针对ETTh1数据集的工业级调优。文章详细探讨了Crossformer如何通过其独特的维度-段式嵌入和两阶段注意力机制,有效捕捉多变量时间序列中的跨维度依赖,并提供了从数据预处理、关键参数调优到训练策略、模型评估与生产部署的完整实战指南。

happy2的博客 655

Crossformer实战:如何用Python快速搭建多变量时间序列预测模型(附避坑指南)

本文详细介绍了如何使用Python快速搭建Crossformer多变量时间序列预测模型,包括环境配置、数据处理、模型构建及调优技巧。Crossformer作为ICLR 2023的亮点模型,通过维度-段式嵌入和两阶段注意力机制,显著提升了预测精度和效率,适用于金融、气象等领域的时间序列分析任务。

weixin_29268385的博客 204

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 351

(17)时间序列预测之Crossformer(跨时间+跨变量)

数据分段将输入序列转变为二维向量数组;使用两阶段注意力层来高效地捕获跨变量和跨时间的依赖关系;采用分层编码器-解码器结构,在不同层次(尺度)上利用信息进行预测。在本文中,跨维度(cross-dimension)指的是跨变量【ICLR 2023】时间序列预测实战Crossformer(附代码+数据集+详细讲解)

m0_62113015的博客 2075

Tesseract-Ocr踩坑下载以及进行检验

1 OCR,即Optical Character Recognition:光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。下载完成后进行解压找到这两个,然后复制到之前下载Tesseract-Ocr的tessdata文件下。可能会出现报错说chi下载的问题咱们不用管继续ok让它先下载完毕,后续会有下载chi的步骤。四、检验tesseract使用(将以下图片进行下载我这里将以下图片命名为3.png)我这里选的是2024年的版本如果下载不了;4 在安装的时候(找到下载的exe文件,双击)

m0_51428325的博客 1918

从PatchTST到Crossformer:时间序列预测中的跨维度依赖为什么这么重要?

本文探讨了时间序列预测中跨维度依赖的重要性,重点介绍了2023年ICLR会议上提出的Crossformer模型。该模型通过创新的维度-段式嵌入(DSW)和两阶段注意力机制(TSA),有效捕捉多变量间的复杂关系,在电力负荷预测和气象预测等场景中显著提升准确率。文章还提供了模型部署的实用指南,包括参数调整和训练策略。

u5v6w7的博客 1005

手把手教你调试eDP接口:Main Link信号异常、AUXCH通信失败怎么办?

本文提供了一份详尽的eDP接口调试实战指南,重点解决Main Link信号异常与AUXCH通信失败两大核心难题。文章系统介绍了从工具准备、信号完整性分析(眼图、抖动测量)到AUXCH协议解码、HPD信号检查的完整排查流程,并分享了链路训练诊断与常见避坑技巧,帮助硬件工程师高效定位并解决显示问题。

Jerry的专栏 832

MacBook上玩转国民技术N32G430:从零搭建ARM开发环境(VSCode + pyOCD)

本文详细介绍了在MacBook上搭建国民技术N32G430的ARM开发环境,涵盖VSCode配置、pyOCD调试及一键编译烧录全流程。通过Homebrew安装工具链、配置Python环境及VSCode插件,开发者可在MacOS高效开发嵌入式应用,特别适合国产芯片N32G430的开发者参考。

weixin_30614109的博客 436

iTransformer实战:在真实数据集上实现SOTA预测性能

iTransformer是一种创新的时间序列预测模型,通过倒置Transformer架构,在多个真实数据集上实现了SOTA(State-of-the-Art)预测性能。作为ICLR 2024 Spotlight论文的官方实现,iTransformer为时间序列预测任务提供了强大而高效的解决方案。 ## iTransformer架构解析:为何倒置Transformer能提升预测性能 🧠 iTr

gitblog_00710的博客 498

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作

本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。

weixin_28826521的博客 449

【亲测免费】 Crossformer 安装和配置指南

### 项目基础介绍 Crossformer 是一个基于 Transformer 的模型,专门用于多元时间序列预测。该项目由上海交通大学 Thinklab 实验室开发,并在 ICLR 2023 会议上发表。Crossformer 通过利用跨维度依赖性,显著提升了多元时间序列预测的准确性。 ### 主要编程语言 该项目主要使用 Python 编程语言进行开发。 ## 2. 项目使用的关键技术和框

gitblog_07210的博客 818

信奥编程启蒙 3068:【例13.3】时间差

现在给出一个时间,单位是秒,要求按照电子表格式输出,输出保证不会超过 2424 小时。3067:【例13.2】 电子表。把时间转化成电子表格式输出。电子表上的时间显示方法形如。

901

攻克反光难题!YOLOv9工业缺陷检测实战:高反光件、微小划痕精准识别(附抗反光代码+产线数据)

文章摘要:本文针对不锈钢、铝合金等高反光工业件的缺陷检测难题,提出了一套“硬件抗反光+YOLOv9小目标增强”的解决方案。通过分析反光干扰(镜面/漫反射)和微小划痕(0.1mm级)两大核心问题,详细介绍了500万像素工业相机+偏振光源的硬件配置方案,以及基于偏振图像融合和超分辨率放大的预处理方法。最终实现误检率1.2%、微小划痕检出率99.3%的工业级检测效果,并提供了可落地的代码实现和车间实测数据。(148字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1043

Crossformer vs 传统Transformer:时间序列预测效果对比实验(含ETTh1数据集复现)

本文通过对比实验,深入分析了Crossformer与传统Transformer在时间序列预测任务上的性能差异。实验基于ETTh1电力数据集,结果显示Crossformer凭借其创新的维度-段式嵌入(DSW)和两阶段注意力(TSA)机制,在MAE、RMSE和MAPE等关键指标上均显著优于传统Transformer,尤其在捕捉跨维度依赖关系方面表现突出。

banana的博客 242

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2191

【ICLR 2024】Crossformer进阶实战:多变量时间序列预测的跨维度依赖解析与优化

本文深入解析了ICLR 2024论文提出的Crossformer模型,该模型通过创新的维度-段式嵌入和两阶段注意力机制,有效解决了多变量时间序列预测中的跨维度依赖难题。文章提供了从核心原理到实战调优的完整指南,包括关键参数解析与自定义数据集训练流程,帮助读者掌握这一先进的深度学习预测工具。

bush的博客 206

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CROSSFORMER: TRANSFORMER UTILIZING CROSSDIMENSION DEPENDENCY FOR MULTIVARIATE TIME SERIES FORECASTIN

最近,人们提出了许多用于多变量时间序列(MTS)预测的深度模型。其中,基于 Transformer 的模型因能捕捉长期依赖性而显示出巨大潜力。然而,现有的基于 Transformer 的模型主要侧重于时间依赖性(跨时依赖性)建模,但往往忽略了不同变量之间的依赖性(跨维依赖性),而这对于 MTS 预测至关重要。为了填补这一空白,我们提出了基于 Transformer 的 Crossformer 模型,利用跨维度依赖性进行 MTS 预测。

qq_59482564的博客 2100

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Crossformer 开源项目教程

Crossformer 开源项目教程 项目介绍 Crossformer 是一个基于 Transformer 的模型,专门设计用于多元时间序列预测。该项目在 ICLR 2023 会议上被评为前 5% 的优秀论文。Crossformer 通过利用跨维度依赖性,有效地捕捉了多元时间序列中的长程依赖关系,从而在多个真实世界数据集上展示了其优于现有模型的性能。 项目快速启动 环境配置 首先,确保你已经安装了...

gitblog_00968的博客 661

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 【RT-DETR有效改进】SIoU、GIoU、CIoU、DIoU、WIoU等多种损失函数
下一篇: YOLOv8改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)
Snu77
Snu77 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 11万+粉丝 934原创
评论 86
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Snu77

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

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

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

打赏作者

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

抵扣说明:

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

余额充值