当前位置: 首页 > article >正文

AI时序预测: iTransformer算法代码深度解析

在之前的文章中,我对iTransformer的Paper进行了详细解析,具体文章如下:

文章链接:深度解析iTransformer:维度倒置与高效注意力机制的结合

今天,我将对iTransformer代码进行解析。回顾Paper,我们知道iTransformer通过简单地将注意力机制和前馈网络应用于倒置的维度上。具体而言,单个序列的时间点被嵌入为变量令牌(variate tokens),并利用注意力机制捕捉变量间的相关性;同时,前馈网络被应用于每个变量令牌,以学习非线性表示。

iTransformer 整体架构如下图所示,采用了 Transformer(Vaswani et al., 2017)的仅编码器(encoder-only)架构,包括嵌入层、投影层和 Transformer 块。接下来,我们看看每个模块是如何通过代码实现的。

图片

1. 嵌入层

 


import torch
import torch.nn as nn

class DataEmbedding_inverted(nn.Module):
    """
    该类用于数据嵌入(Embedding),适用于时间序列建模或其他需要将输入转换为高维表示的任务。
    它通过线性变换将输入数据映射到 `d_model` 维度,并可选地结合额外的时间信息进行处理。

    参数:
    - c_in (int): 输入特征的维度(即变量数)。
    - d_model (int): 目标嵌入维度(即转换后的特征维度)。
    - embed_type (str, 可选): 嵌入类型,当前代码未使用该参数,默认值为 'fixed'。
    - freq (str, 可选): 频率信息(如 'h' 代表小时级别),当前代码未使用该参数。
    - dropout (float, 可选): Dropout 比例,控制神经元随机失活的概率,以防止过拟合。
    """

    def __init__(self, c_in, d_model, embed_type='fixed', freq='h', dropout=0.1):
        super(DataEmbedding_inverted, self).__init__()

        # 线性映射层:将输入数据从 `c_in` 维度投影到 `d_model` 维度
        self.value_embedding = nn.Linear(c_in, d_model)

        # Dropout 层:用于在训练时随机丢弃部分神经元,以增强模型的泛化能力
        self.dropout = nn.Dropout(p=dropout)

    def forward(self, x, x_mark):
        """
        前向传播函数,将输入 `x` 及可选的时间标记 `x_mark` 进行处理,返回嵌入后的表示。

        参数:
        - x (Tensor): 输入数据,形状为 [Batch, Time, Variate],其中:
            - Batch: 批量大小
            - Time: 时间步数
            - Variate: 变量数(即 `c_in`)
        - x_mark (Tensor 或 None): 时间标记信息,形状为 [Batch, Time, Extra_Features],
          如果为 None,则仅使用 `x` 进行嵌入。

        返回:
        - Tensor: 经过嵌入和 Dropout 处理后的数据,形状为 [Batch, Variate, d_model]。
        """

        # 交换 `Time` 和 `Variate` 维度,调整形状以适配后续处理
        x = x.permute(0, 2, 1)  # 变换后形状:[Batch, Variate, Time]

        if x_mark is None:
            # 仅使用输入数据 `x` 进行嵌入
            x = self.value_embedding(x)
        else:
            # 如果提供了 `x_mark`,先调整其形状,再与 `x` 拼接后进行嵌入
            x = self.value_embedding(torch.cat([x, x_mark.permute(0, 2, 1)], dim=1))

        # 经过 Dropout 处理后返回最终的嵌入表示
        return self.dropout(x)

完整文章链接:AI时序预测: iTransformer算法代码深度解析


http://www.kler.cn/a/526436.html

相关文章:

  • zabbix7 配置字体 解决中文乱码问题(随手记)
  • leetcode——合并K个有序链表(java)
  • deepseek R1 14b显存占用
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(动态菜单组件实现)
  • JxBrowser 7.41.7 版本发布啦!
  • 分布式系统架构怎么搭建?
  • UE学习日志#15 C++笔记#1 基础复习
  • 无线通信与人工智能技术与发展年度总结
  • MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
  • Kafka 压缩算法详细介绍
  • 【股票数据API接口41】如何获取股票指最新分时MA数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • gesp(C++六级)(7)洛谷:P10376:[GESP202403 六级] 游戏
  • 范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作
  • CF1098F Ж-function
  • F. Ira and Flamenco
  • 智慧园区系统助力企业智能化升级实现管理效率与安全性全方位提升
  • B站吴恩达机器学习笔记
  • C++11之列表初始化
  • 不够专业,想更体系化
  • 【视频+图文详解】HTML基础4-html标签的基本使用
  • 2025美赛复盘总结反思(论文手)
  • 第27篇:Python开发进阶:python多线程与多进程编程
  • [LeetCode]day 5 209.长度最小的子数组
  • EWM 变更库存类型
  • Leetcode 3434. Maximum Frequency After Subarray Operation
  • 剑指 Offer II 012. 左右两边子数组的和相等