【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 个特征

全局标准化

相关推荐
地平线开发者25 分钟前
bevformer算法模型详细解读
算法
liliangcsdn43 分钟前
ICIR权重矩阵如何加权标准化为综合因子
算法
SDWAN_Cheap1 小时前
SD-WAN智能选路技术的算法与实现机制
算法·php·sdwan
不会就选b2 小时前
数据结构之树&&二叉树(二)
数据结构·算法
渡之2 小时前
ArduPilot (APM)滤波器之SlewLimiter 深度解析
算法
zander2583 小时前
LeetCode 1143. 最长公共子序列
开发语言·python·算法
Sumerking3 小时前
llc_control.c 专项评审(v3 更新版)
c语言·开发语言·算法·obc
软行3 小时前
LeetCode 每日一题 3876. 构造奇偶一致的数组 II
c++·算法·leetcode
绿算技术3 小时前
Solidigm联合绿算技术共同发布《面向 SOHO AI 推理的存储扩展方案》技术白皮书
人工智能·科技·算法·架构·spark
EDPJ4 小时前
(2026|IPI|我的论文投稿中,PSP 超轻量采样算法,轻量化架构探索/早融合+头压缩)LUMIN:面向工业异常检测的轻量级通用制造检测网络
算法·计算机视觉·架构·异常检测·采样算法