【SegRNN 源码理解】self.revIN可逆实例标准化

python 复制代码
       if self.revin: #self.revin =  1  (休止符)
            x = self.revinLayer(x, 'norm').permute(0, 2, 1) # b,s,c -> b,c,s # goto 

也是一种标准化

  1. 是什么
  2. 两次标准化
  3. 分布偏移
  4. 实例归一化

实例归一化

分布偏移

计算方法

python 复制代码
# 归一化步骤
x = (x - mean) / std  # 消除分布偏移

# 在预测后的反归一化步骤
y = y * std + mean  # 恢复原始数据分布

RevIN的工作原理:

  1. 实例级归一化

    • 不同于全局标准化,RevIN对每个输入序列单独计算统计量
    • 针对每个通道(特征)分别处理
  2. 可逆设计

    • 保存归一化参数(均值和标准差)
    • 允许在预测后"反归一化",恢复原始数据分布的特性
  3. 保留模式而消除分布

    • 消除绝对水平和尺度的影响
    • 让模型专注于学习序列的相对变化模式

举例说明:

假设有两个季节的疾病数据,夏季感染率在0-10范围,冬季在50-60范围:

应用RevIN后:

是什么

这段代码完成两个关键操作:

1. 数据归一化处理 (RevIN)

self.revinLayer(x, 'norm') 调用了 RevIN (Reversible Instance Normalization) 层对输入数据进行归一化:

  • RevIN 是什么:一种专为时间序列设计的可逆归一化技术,可以处理非平稳时间序列中的分布偏移问题

  • 工作原理:对每个实例(样本)的每个通道分别进行归一化

  • 为什么需要:与数据加载时的全局标准化不同,RevIN 对每个序列单独归一化,处理序列内部的分布变化

  • 可逆特性:RevIN 保存归一化参数,在模型输出时可以"反归一化",恢复原始分布

2. 维度变换 (permute)

.permute(0, 2, 1) 改变了张量的维度顺序:

  • 输入形状 :[batch_size, seq_len, channels] 简写为 [b, s, c]

    • 例如 [16, 60, 7]:16个样本,每个60个时间步,每个时间步7个特征
  • 输出形状 :[batch_size, channels, seq_len] 即 [b, c, s]

    • 变为 [16, 7, 60]:16个样本,7个特征通道,每个通道60个时间步
  • 变换目的

    1. 将特征/通道维度提到第二维,便于后续按通道处理数据
    2. 为分段操作做准备,让时间维度在最后,便于后续分段处理
    3. 符合许多深度学习库的惯例,如卷积操作通常期望通道在第二维

更具体的例子:16 个批次,60 个时间步,每个时间步 7 个特征

全局标准化

相关推荐
mit6.8241 小时前
[Sora] 从检查点恢复训练 | `Booster`接口 | EMA模型 | .safetensors
人工智能·算法·机器学习
CoovallyAIHub1 小时前
清华Mars Lab发布SLAM-Former:用一个Transformer统一SLAM的前端与后端(附项目地址)
深度学习·算法·计算机视觉
寂静山林2 小时前
UVa 12803 Arithmetic Expressions
算法
CoovallyAIHub2 小时前
AI基础设施新玩家:Tinker如何重新定义LLM微调工作流?
深度学习·算法·计算机视觉
xzk201210022 小时前
洛谷 P1438 无聊的数列 题解
c++·算法·树状数组
OKkankan2 小时前
list的使用和模拟实现
数据结构·c++·算法·list
熬了夜的程序员3 小时前
【LeetCode】74. 搜索二维矩阵
线性代数·算法·leetcode·职场和发展·矩阵·深度优先·动态规划
蓝色汪洋3 小时前
oj字符矩阵
算法
点云SLAM3 小时前
矩阵奇异值分解算法(SVD)的导数 / 灵敏度分析
人工智能·线性代数·算法·机器学习·矩阵·数据压缩·svd算法
坚持编程的菜鸟3 小时前
LeetCode每日一题——矩阵置0
c语言·算法·leetcode·矩阵