时序预测算法Autoformer代码解读
·
在之前的文章中,我对Autoformer的Paper进行了详细解读。今天,对Autoformer的代码按模块进行解读。
Autoformer论文解读: Autoformer: 一种基于自动相关机制的时序预测新架构
Autoformer是将 Transformer 改造为一种深度分解架构(如图 1 所示)包含编码器和解码器两部分。
接下来,我会分别对编码器和解码器中涉及到的模块给出具体的代码实现。
1. Encoder层
Encoder层中包括Auto-Correlation模块,Series Decomp模块。Encoder 专注于季节性部分的建模。编码器的输出包含过去的季节性信息,并将作为跨信息用于帮助解码器优化预测结果。
1.1 Series Decomp模块
在 Autoformer 模型中,序列分解的目标是将时间序列分解为 趋势 和 季节性 部分。这样可以更好地理解序列的长期发展趋势,并单独建模季节性波动。这对于长期预测任务尤为重要,因为长期趋势通常比短期波动更具预测价值。
-
趋势部分(moving_mean):代表时间序列的长期变化趋势,通常是平稳的。
-
季节性部分(res):表示时间序列中随时间变化的周期性波动(例如季节性、节假日效应等)。
class moving_avg(nn.Module):
"""
Moving average block to highlight the trend of time series
"""
def __init__(self, kernel_size, stride):
super(moving_avg, self).__init__()
self.kernel_size = kernel_size
self.avg = nn.AvgPool1d(kernel_size=kernel_size, stride=stride, padding=0)
def forward(self, x):
# padding on the both ends of time series
front = x[:, 0:1, :].repeat(1, (self.kernel_size - 1) // 2, 1)
end = x[:, -1:, :].repeat(1, (self.kernel_size - 1) // 2, 1)
x = torch.cat([front, x, end], dim=1)
x = self.avg(x.permute(0, 2, 1))
x = x.permute(0, 2, 1)
return x
class series_decomp(nn.Module):
"""
Series decomposition block
"""
def __init__(self, kernel_size):
super(series_decomp, self).__init__()
self.moving_avg = moving_avg(kernel_size, stride=1)
def forward(self, x):
moving_mean = self.moving_avg(x)
res = x - moving_mean
return res, moving_mean
完整文章链接: 时序预测算法Autoformer代码解读
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)