1.前言
笔者最近在阅读TIMESNET这篇论文,但在阅读代码的过程中发现了一些问题,其在reshape的细节上可能与原论文的叙述出现了一些偏差,不知道是不是笔者本人的误解,故记录,与供感兴趣的同学进一步探讨。
2.简介
本文是ICLR2023的一篇论文,主要是提出了一种新的时间建模思路,即将一维的时间序列通过快速傅里叶变换求得多个周期(根据频域峰值确定周期),然后将原始的一维时间序列reshape成二维的周期序列,如:一个10帧的时间序列,求得周期为2,则将其reshape成一个[2,5]的时间序列,这样就可以使用二维的卷积核捕捉周期内的信息,以及周期间的信息。而传统的一维卷积核,只能聚合相邻帧之间的信息,无法实现对周期性信息的建模。文章在多种时间序列任务上均取得了不错的效果,且笔者觉得思路非常有趣,具体的细节值得各位亲自阅读,这里不再赘述。
3.代码的一处细节疑问
根据论文作者给出的开源代码,笔者进一步进行了研究,发现在/model/TimesNet.py内有这样一处:
# reshape
out = out.reshape(B, length // period, period, N).permute(0, 3, 1, 2).contiguous()
# 2D conv: from 1d Variation to 2d Variation
out = self.conv(out)
其中,out 是输入的时间序列,B 为 batch,length 为时间序列长度,period