笔记简介
笔记:记录一下实现Informer时序预测的过程,同时加注一些要点,并加上构建自己数据集进行预测的过程。
内容:
1、Informer论文解读、复现
2、构建自己的数据集
3、利用Informer对数据集进行预测
一、Informer论文
摘要:许多实际应用需要长序列时间序列的预测,例如电力消耗计划。长序列时间序列预测(LSTF)要求模型具有较高的预测能力,即能够准确有效地捕捉输出与输入之间的长期依赖耦合。最近的研究表明,Transformer可以提高预测能力。然而,然而,Transformer存在几个严重的问题,这些问题使它无法直接应用于LSTF,包括二次时间复杂度、高内存使用和编码器-解码器架构的固有限制。为了解决这些问题,我们为LSTF设计了一个高效的基于Transformer的模型,名为Informer,它具有三个显著的特征:1、ProbSparse自注意力机制,该机制在时间复杂度和内存使用上达到 ,并且在序列依赖对齐方面具有相当的性能。2、自注意力提取通过将级联层输入减半来突出主导注意力,并有效地处理超长输入序列。3、生成式解码器虽然在概念上简单,但它可以通过一次前向运算而不是一步一步地预测长时间序列序列,从而大大提高了长序列预测的推理速度。在四个大规模数据集上的大量实验表明,Informer算法显著优于现有方法,为LSTF问题提供了一种新的解决方案。
论文地址:https://arxiv.org/abs/2012.07436
官方代码地址:https://github.com/zhouhaoyi/Informer2020
二、Informer网络结构
左:编码器接收大量长序列输入(绿色序列)。用ProbSparse自注意力机制代替了典型的自注意力机制。蓝色梯形是自注意力提取操作,用于提取主导注意力,大幅减少网络规模。层堆叠副本增加了鲁棒性。右:解码器接收长序列输入,将目标元素填充为零,测量特征图的加权注意力组成,并以生成风格即时预测输出元素(橙色序列)。
Informer编码器中的单个堆栈。(1)水平堆栈代表图1中的单独一个编码器副本。(2)所呈现的栈是接收整个输入序列的主栈。然后第二个堆栈取输入的一半,随后的堆栈重复。(3)红色层是点积矩阵,通过对每一层进行自注意提取,得到级联下降。(4)将所有堆栈的特征映射连接起来作为编码器的输出。
三、数据集Database
3.1 ETTh1 - Data
官方数据集地址:https://github.com/zhouhaoyi/ETDataset
百度云盘:https://pan.baidu.com/share/init?surl=wyaGUisUICYHnfkZzWCwyA 提取码:6gan
数据格式: [ date 特征1 …………特征 6 目标特征]
3.2 MyData
格式与ETTh1.csv保持一致,特征量可以更改。读取的时间序列编码方式可以更改,具体见下方参数说明。由于本人项目原因,个人数据集暂时不公开。
代码内修改方法:在main的data_parser添加自己的数据集数据,与ETTh1保持一致的写法如下:
四、代码说明
4.1 参数设置以及相关说明
Parameter name | Description of parameter |
---|---|
model | 实验模型。这可以设置为informer, informerstack, informerlight(待定) |
data | The dataset name |
root_path | 数据文件的根路径 (defaults to ./data/ETT/ ) |
data_path | 数据文件名 (defaults to ETTh1.csv ) |
features | 预测任务(默认为M)。可以设置为M、S、MS (M:多元预测多元,S:单变量预测单变量,MS:多元预测单变量)。 |
target | S或MS任务中的目标特性(默认为OT) |
freq | 时间特征编码的频率(默认为h)。可以设置为s,t,h,d,b,w,m (s:秒,t:分钟,h:小时,d:每天,b:工作日,w:每周,m:每月)。你也可以使用更详细的频率,比如15分钟或3小时 注:上述时间特征可以在此处修改 |
checkpoints | 模型保存 (defaults to ./checkpoints/ ) |
seq_len | Informer编码器的输入序列长度 (defaults to 96) |
label_len | Informer解码器的起始令牌长度 (defaults to 48) |
pred_len | 预测序列长度 (defaults to 24) |
enc_in | 编码器输入特征size (defaults to 7) |
dec_in | 解码器输入特征size (defaults to 7) |
c_out | 输出特征 size (defaults to 7) |
d_model | 模型尺寸 (defaults to 512) |
n_heads | 头数量 (defaults to 8) 注:如果速度太慢调小,精度不变的情况下 |
e_layers | 编码器层数 (defaults to 2) |
d_layers | 解码器层数 (defaults to 1) |
s_layers | 堆栈编码器层数 (defaults to 3,2,1 ) |
d_ff | fcn尺寸 (defaults to 2048) |
factor | 概率稀疏因子 (defaults to 5) |
padding | Padding type(defaults to 0). |
distil | 是否在编码器中使用蒸馏,使用此参数意味着不使用蒸馏 (defaults to True ) |
dropout | The probability of dropout (defaults to 0.05) |
attn | Attention used in encoder (defaults to prob ). This can be set to prob (informer), full (transformer) 注:注意力机制 |
embed | 时间特征编码方式 (defaults to timeF ). This can be set to timeF , fixed , learned |
activation | Activation function (defaults to gelu ) 激活函数 |
output_attention | Whether to output attention in encoder, using this argument means outputing attention (defaults to False ) |
do_predict | 是否预测看不见的未来数据,使用这个意味着做出预测 (defaults to False ) |
mix | Whether to use mix attention in generative decoder, using this argument means not using mix attention (defaults to True ) |
cols | Certain cols from the data files as the input features |
num_workers | The num_works of Data loader (defaults to 0) Windows建议不要修改 |
itr | Experiments times (defaults to 2) 重复训练次数 |
train_epochs | Train epochs (defaults to 6) 训练轮数 |
batch_size | The batch size of training input data (defaults to 32) |
patience | Early stopping patience (defaults to 3) 早停 |
learning_rate | Optimizer learning rate (defaults to 0.0001) |
des | Experiment description (defaults to test ) |
loss | Loss function (defaults to mse ) |
lradj | Ways to adjust the learning rate (defaults to type1 ) |
use_amp | Whether to use automatic mixed precision training, using this argument means using amp (defaults to False ) |
inverse | Whether to inverse output data, using this argument means inversing output data (defaults to False ) 归一化输出数据,如果输出的和你输入的不一样,改成True |
use_gpu | Whether to use gpu (defaults to True ) |
gpu | The gpu no, used for training and inference (defaults to 0) |
use_multi_gpu | Whether to use multiple gpus, using this argument means using mulitple gpus (defaults to False ) |
devices | Device ids of multile gpus (defaults to 0,1,2,3 ) |
4.2 代码结构
五、代码运行与结果分析
main_informer.py: error: the following arguments are required: --model, --data
将 required = True 删掉
数据集对应好后即可直接运行(以下结果为个人自建数据集)
实现结果:训练10个Epoch,输入序列数量远大于输出序列时,基本没有滞后性,且预测性能较好。
当预测序列数量接近于输入时,会出现预测结果偏差较大。
当预测序列数量远大于输入时,会出现末端预测结果直接平缓,基本上预测不出特征。
总结:
长期预测,建议使用其他模型。个人复现结果来看Informer适合于短期预测。
标签:编码器,预测,复现,defaults,序列,Informer,数据,输入 From: https://blog.csdn.net/MarkKrind/article/details/139499069