Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting (AAAI'21 Best Paper)的项目解读+跑通+换自己数据集跑通

2021评选AAAI最牛逼论文,我看看有多牛逼

项目开源地址

https://github.com/zhouhaoyi/Informer2020

项目论文

https://arxiv.org/abs/2012.07436

项目核心

解码器和编码器的优化创新点

对于QKV,作者研究对于Q与K之间相乘得到一个向量去看这俩是否有关系。

但是作者研究发现大部分的Q与K之间没啥关系,就导致之前的transformer运行慢。

然后作者随机选了几个K去找和所有Q的关系(算两者之间的向量乘积然后看他的分布)

按效果进行排序,选与均匀分布差异最大的,效果好的就留下来,效果不好的就近似与均匀分布,这部分直接不要了,用均匀分布的均值来直接替换这部分

然后再去用这些剩下的K去进行下一步的操作。

具体的项目解读可以看:https://www.bilibili.com/video/BV1HfaMzoEgE?spm_id_from=333.788.videopod.episodes&vd_source=f3cb663bad56d7ea1173bc32c499a9d2&p=10

下载了数据集解压缩看看

先按照README文件里面要求的环境配好,其实也不用配,用你常用的环境能跑就完事了

我复现一下跑WTH数据集,去这里面下载这个数据集

我把这个文件放在了data目录下

打开main_informer文件,看一下我们要改的地方是什么。

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('--data', type=str, required=True, default='WTH', help='data')
parser.add_argument('--root_path', type=str, default='./data/', help='root path of the data file')
parser.add_argument('--data_path', type=str, default='WTH.csv', help='data file') 

然后打开anaconda prompt,切换到你用的Python虚拟环境

conda activate your_env_name

将运行目录找到你的main_informer运行主程序下的地址,方便进行指令控制

cd C:\Users\xxx\xxx\xxx\xx

完成后就是这样

然后打开readme看一下运行指令是什么

没给WTH的,照猫画虎自己编

python -u main_informer.py --model informer --data WTH --attn prob --freq h

python -u XXX就是启动什么程序,我们填我们的主程序main_informer

--model xxx就是选你要跑的模型 我们肯定跑这次的主角informer 

--data xxx就是你的数据集名字

--attn prob 就是注意力机制用哪个模型,他论文就是这个改进后的模型不用改

--freq XXX就是数据集的尺度,要是分钟就写t,小时就写h

 将指令输入到anaconda prompt中

跑起来了,如果不能用GPU跑的,自己弄教程也不会,花米去某鱼或某宝找人弄一下就行。

跑完。

然后换自己数据集,我用最简单的为例,纯预测流量

date flow
9/19/2016 0:00 13
9/19/2016 0:20 6
9/19/2016 0:40 9

第一列为时间,第二列为流量。

还是把数据集放在data目录下,然后看一下需要改什么

这三个改成你数据集的目录

这里面加一行你的数据集的东西

如下

'数据集名称': {'data': '数据集文件名', 'T': '你要预测的内一列的表头名字', 'M': [1, 1, 1], 'S': [1, 1, 1], 'MS': [1, 1, 1]},

后面的M,S,MS就是单变量还是多变量预测,对于M,S来说里面全填除了你时间内一列还有几列,我除了时间内列就是流量,所以全填1

对于MS来说,前两个空填除了你时间内一列还有几列,最后一个空填1

exp_informer里面加一行你的数据集的

然后去编运行指令

python -u main_informer.py --model informer --data gaosu --attn prob --freq t

python -u XXX就是启动什么程序,我们填我们的主程序main_informer

--model xxx就是选你要跑的模型 我们肯定跑这次的主角informer 

--data xxx就是你的数据集名字

--attn prob 就是注意力机制用哪个模型,他论文就是这个改进后的模型不用改

--freq XXX就是数据集的尺度,要是分钟就写t,小时就写h

直接把指令输入到anaconda prompt,开跑

跑完了

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐