时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用

您所在的位置:网站首页 informer论文下载 时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用

时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用

2024-07-12 22:24| 来源: 网络整理| 查看: 265

更新目录

2021-10-11 14:10 更新:informer的预测本质

2022-10-13 14:57 更新:informer带注册的源码链接

经调试发现,informer的预测并不存在这种问题(时间预测的悖论),请看第七点提到的。

2021-11 ​​如何安装GPU版本的ML框架、而且是多版本共存的那种,两种方法​​2021-11-10 群友提供实现随机种子的函数实现以及具体分析2022更新 注释链接和代码以及说明、案例在文章底部

一、前言

本文章是对informer开源代码进行自定义数据集(就是如何修改代码以跑通自己的数据集,毕竟原代码仓库没有注释)的使用的代码修改和代码流程解释。由于该informer项目仓库的源码没有注释,本文是包含注释的内容。

以Github上的源码为准!以Github上的源码为准!以Github上的源码为准!

要想得到好的模型效果,你要做的不只是拿数据套模型而已!套模型调参、修改模型之前你要的事情还有很多,这些事情几乎占用你整个项目的60%的时间!

二、informer相关论文:​​https://arxiv.org/abs/2012.07436​​ 代码仓库:​​https://github.com/zhouhaoyi/Informer2020​​ 简介:据网上说是被评为AAAI 2021最佳论文,其作者设计了一种专为LSTF (长序列时间序列预测)设计的基于Transformer的改进模型 Informer,来解决Transformer在应用于LSTF时存在一些严重的问题。比如二次时间复杂度、较高的内存使用量和编解码器结构的固有限制等。Informer具有三个显著特点:采用ProbSparse自关注机制、自注意力提炼、生成式解码器。感谢论文作者对AI科学做出的贡献,才能像我这种普通人能有机会接触这么nice的文章。作者的github:​​https://github.com/zhouhaoyi/Informer2020​​ 三、informer原理和模型架构

这里请自行百度,百度讲的比较透彻,比如:

​​AAAI 2021最佳论文 Informer​​ ​​AAAI 2021最佳论文《Informer》作者:Transformer 最新进展​​ ​​解读:Informer——比Transformer更有效的长时间序列预测方法​​ 四、informer代码框架、 流水线解读

1.informer的项目结构:

时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用_Informer

以上主要看红色框框部分,一个框框相当于一个模块,从上到下依次的模块含义是:

①:项目的数据文件夹,其中data_loader文件是加载数据、预处理数据的作用。②:项目的训练功能文件夹,这里面的py文件是用来训练模型的作用。③:model文件夹,这里包含了模型的详细结构实现、各种作者提出的新的东西都在里面。④:scripts文件夹,这里包含了模型的启动脚本、使用脚本。⑤:utols文件夹,这里包含了模型的评估指标、时间轴的时间特征处理、指数缩减学习率、提前停止训练策略、数据标准化策略等功能。当然,还有作者提出的新型mask也在这里面。⑥:第六部分这里是项目的启动入口main_informer文件(该文件包含了程序入口、变量初始化设置等),还有readme文件、还有依赖包文件。

注意,如果你还没创建好项目的先创建好项目,然后配置解释器,之后:

pip install -r requirements.txt五、快速跑通示例和自定义数据集

1.运行示例

配置好项目和安装好模块之后,先启动作者给出的数据文件看看是否能够启动:

作者给出的是这样的命令:

# ETTh1python -u main_informer.py --model informer --data ETTh1 --attn prob --freq h

# ETTh2python -u main_informer.py --model informer --data ETTh2 --attn prob --freq h

# ETTm1python -u main_informer.py --model informer --data ETTm1 --attn prob --freq t

当然也可以这样就好(然后在代码文件中设置好数据和时间频率):

# ETTh1python -u main_informer.py --model informer --data ETTh1

启动成功之后,可以去配置成自己所需要的自定义数据集。

2.跑通自定义数据集

将自定义数据序列数据集文件夹添加到data文件夹下之后,前往代码修改以下几个地方: 首先,你的自定义数据集的时间列的字段名称 要是“date”,当然也可以不是,但是那样的话需要去改一下dataframe代码的列名。

(1)main_informer里面:

parser.add_argument('--data', type=str, required=True, default='titick', help='data them')parser.add_argument('--root_path', type=str, default='./data/titick/', help='数据文件的根路径(root path of the data file)')

parser.add_argument('--features', type=str, default='S',....)

parser.add_argument('--data_path', type=str, default='日均价.csv', help='data file')

# 想要获得最终预测的话这里应该设置为True;否则将是获得一个标准化的预测。parser.add_argument('--inverse', action='store_true', help='逆标准化输出数据' 'inverse output data', default=True)

data_parser = { 'ETTh1':{'data':'ETTh1.csv','T':'OT','M':[7,7,7],'S':[1,1,1],'MS':[7,7,1]}, 'ETTh2':{'data':'ETTh2.csv','T':'OT','M':[7,7,7],'S':[1,1,1],'MS':[7,7,1]}, 'ETTm1':{'data':'ETTm1.csv','T':'OT','M':[7,7,7],'S':[1,1,1],'MS':[7,7,1]}, 'ETTm2':{'data':'ETTm2.csv','T':'OT','M':[7,7,7],'S':[1,1,1],'MS':[7,7,1]}, 'WTH':{'data':'WTH.csv','T':'WetBulbCelsius','M':[12,12,12],'S':[1,1,1],'MS':[12,12,1]}, 'ECL':{'data':'ECL.csv','T':'MT_320','M':[321,321,321],'S':[1,1,1],'MS':[321,321,1]}, 'Solar':{'data':'solar_AL.csv','T':'POWER_136','M':[137,137,137],'S':[1,1,1],'MS':[137,137,1]}, 'titick':{'data':'日均价.csv','T':'price','M':[7,7,7],'S':[1,1,1],'MS':[7,7,1]},}

(2)还有exp_informer文件的这里:

时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用_Informer_02

六、修改自定义数据集部分模块的主要解读

注意:将随机打散数据的设置关掉将有助于你去调试模型,去观察张量维度变化。如下:

时间序列深度学习模型AAAI 2021论文之一Informer的主要代码解读、项目运作、自定义数据集使用_Informer_03

七、代码疑惑点:是否存在时间预测的悖论【不存在】

预测功能的时候本身有可能还是将已知数据作为输入来预测未来,因为现实场景中不会那样的。(说 有可能 主要是我不敢确定是不是,因为我毕竟习惯和常用TensorFlow,pytorch的代码不是看的很清晰)

这种现实场景就是:假如要预测2021-12-10~2021-12-20号的数据,但是需要2021-11-05到2021-12-09号的数据作为输入X才能实现预测,但是现在还没到11-05,所以那部分X数据就是未来的、是未知的,这种情况下就无法预测,这个是现实问题。

详细请看我的这篇博客:​LSTM时间序列预测存在的问题–滑动窗口是一把双刃剑 | Python技能树征题​​

2021-10-11 14:10 更新:informer的预测本质

经调试发现,informer的预测并不存在这种问题(时间预测的悖论)。

八、实验发现存在的一些疑惑在预测未来的时候,如果是长时间预测则无法较好的预测出突变的信息,如果是短期的预测(比如2~3个时间点)才能预测出突变,但是不稳定。更换了损失函数发现原装的mse相对最好,mse特性本身就是对“异常点”有鲁棒性。huber loss进行长序列预测的时候容易趋于稳定。关于shuffle_flag的设置,训练集的shuffle_flag如果为Flase的话发现预测的时候predict会很好但是需要把dropout设置的比较大比如0.5,为True的话需要把dropout设置的比较小比如0.05。

仅为个人的数据集上的实验内容,每个数据集可能都不一样。有什么好的方法留言一起交流。

九、仓库

2022-06-26 ​​代码分享,如果您觉得对您有帮助,欢迎您为仓库点个star​​

最后:据说SCINet论文和代码结果相对informer来说更好,可以去试试这个2021年的新模型。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3