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

全局标准化

相关推荐
東隅已逝,桑榆非晚2 分钟前
算法1. 双指针法-移动零
c++·算法
CQU_JIAKE1 小时前
11.1[A]
算法
小郎君6581 小时前
(六)el-cascader 的展示值为什么不能直接 join:emitPath、路径还原与多选去重
vue.js·算法
郝学胜-神的一滴3 小时前
游戏设计:原型与开发 19:U3D工位布置与性格说明书
人工智能·算法·unity·unreal engine·游戏策划·游戏设计
hahaha60164 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
YSL0701244 小时前
一文通关-----树和二叉树
数据结构·算法
青少儿编程课堂4 小时前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
computersciencer4 小时前
应用贝叶斯公式:迟到了,那坐的是哪种交通工具呢?
算法·机器学习·概率论
若亦_4 小时前
排序>>交换排序
java·数据结构·算法
dialect_13 小时前
KMP算法
开发语言·c++·算法