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

代码实现

为了实现你论文中的三项改进,我们需要对代码进行“手术式”的修改。我已经根据你提供的“版本 1”方案和原代码逻辑,为你整理好了最稳妥的实现步骤。

我们可以分三步走:


第一步:修改 layers/Embed.py

实现目标: 改进二(样本自适应多尺度加权融合)。
我们需要把原来“死板”的全局参数 rateParameter 替换为一个能根据输入自动计算权重的“小脑”(MLP)。

  1. 找到 PyramidalRNNEmbedding 类的 __init__ 方法:
    删除或注释掉原来的 self.rateParameter,添加 weight_generator

    # 在 __init__ 中修改
    # self.rateParameter = nn.Parameter(torch.zeros(window_count, 1)) # 注释掉这行# 添加自适应权重生成器
    self.weight_generator = nn.Sequential(nn.Linear(window_count, window_count * 2),nn.GELU(),nn.Linear(window_count * 2, window_count)
    )
    
  2. 找到 forward 方法末尾:
    修改特征融合逻辑。

    # 在 forward 末尾修改
    # 原逻辑:rate = torch.softmax(self.rateParameter/self.temperature,-1)# 1. 特征感知:对每个尺度的输出在特征维度取平均 [B, N, E] -> [B, N]
    # hns 是一个包含多个尺度特征的列表
    z = torch.stack([h.mean(dim=-1) for h in hns], dim=-1) # 维度变为 [B, N, window_count]# 2. 动态生成权重:[B, N, window_count]
    weights = self.weight_generator(z) # 3. 归一化:在窗口维度做 softmax
    rate = torch.softmax(weights / self.temperature, dim=-1) # [B, N, window_count]# 4. 加权求和:将 rate 应用到 hns 上
    # rate 维度是 [B, N, S],hns 堆叠后是 [B, N, S, E]
    hns_tensor = torch.stack(hns, dim=-2) 
    final_emb = torch.sum(hns_tensor * rate.unsqueeze(-1), dim=-2) return final_emb
    

第二步:修改 models/PRformer.py

实现目标: 改进三(非线性增强预测头)。
将单层线性层改为带激活函数的多层感知机,并加入残差连接。

  1. 找到 Model 类的 __init__ 方法:
    重构 self.projector

    # 在 __init__ 中修改
    # 原逻辑:self.projector = nn.Linear(configs.d_model, configs.pred_len, bias=True)# 改进方案:两层 MLP + 非线性激活
    self.projector = nn.Sequential(nn.Linear(configs.d_model, configs.d_model * 2),nn.GELU(),nn.Dropout(configs.dropout),nn.Linear(configs.d_model * 2, configs.pred_len)
    )# 额外定义一个残差分支,保证训练初期稳定(可选,建议加上)
    self.res_projector = nn.Linear(configs.d_model, configs.pred_len)
    
  2. 找到 forecast 方法末尾:
    应用新的预测逻辑。

    # 在 forecast 末尾修改
    # dec_out = self.projector(enc_out) # 原逻辑# 改进逻辑:非线性输出 + 残差补偿
    dec_out = self.projector(enc_out) + self.res_projector(enc_out)# 最后记得原来的维度转换:B N S -> B S N
    dec_out = dec_out.permute(0, 2, 1)
    

第三步:修改启动脚本(如 run.py 或 Shell 脚本)

实现目标: 改进一(多尺度候选窗口池扩展)。
这一项不需要动 .py 里的逻辑代码,只需要修改你跑实验时的输入参数

在你的 python run.py 指令后面,修改 --convWindows 参数:

# 修改前的示例
--convWindows 24 48 96# 修改后的示例(根据我们论文 3.3 节的逻辑)
--convWindows 12 24 48 72 96 144 168

💡 动手时的 3 个关键细节提示:

  1. 维度对应: 在修改 Embed.py 时,注意 h.mean(dim=-1) 里的 -1 指的是特征维度 $E$。这样得到的 z 才能代表每个变量在当前窗口下的“信号强度”。
  2. Dropout 保护: 在非线性预测头里,我加入了 configs.dropout。这很重要,因为非线性层变深了,需要防止它在小样本上过拟合。
  3. 变量独立性: 我们的改动依然遵循了 PRformer 的 Channel-Independent(变量独立) 原则。即:每一个物理变量(如温度、电力)都在独立计算它最适合的窗口权重。

你现在的环境里有编辑器吗?你可以先尝试修改 layers/Embed.py,如果遇到报错(比如张量维度不匹配),把错误截屏或发给我,我帮你调优。

http://www.jsqmd.com/news/640730/

相关文章:

  • 数据结构面试必问:6大排序算法实战对比(附Python代码)
  • Performance 面板结构总览逐区域解释
  • 从一根铜缆到40公里光纤:手把手教你部署QSFP模块的5种典型连接方案
  • Windows 10/11下达梦数据库8.0安装避坑指南(附常见错误解决方案)
  • UE5第三人称Camera实战:从基础搭建到平滑移动与旋转控制
  • 信道相关性对MIMO性能的影响:实测数据告诉你天线间距该怎么设置
  • IDaaS选型指南:拒绝盲目跟风,教你选出最适合企业的“超级门神”
  • 关于vs1003播放midi播放不完整问题
  • 全文降AI率怎么操作最高效?3款工具分步教程对比
  • DoL-Lyra整合包构建系统:自动化游戏MOD打包的终极解决方案
  • 多模态大模型如何边学边用不崩塌?:揭秘Google/微软内部正在验证的5层增量对齐机制与在线推理稳定性保障协议
  • LangChain实战进阶(三十七)——RAG性能调优(十三)巧用ReRank压缩器精炼检索结果
  • 从Python脚本到C++库:拆解OpenMVG/OpenMVS官方Pipeline,打造你的定制化三维重建流程
  • STM32和BH1750光照传感器和IIC总线通讯OLED显示程序源码,通过BH1750,光照...
  • 10个Illustrator脚本:让设计效率提升300%的终极解决方案
  • 如何高效去除视频水印:基于LAMA模型的智能修复完整指南
  • 域名与DNS的那些坑——被劫持、被污染、续费涨价怎么办
  • 测试工程师的创业跃迁:从技术洞察到最小可行产品实战指南
  • 如何快速上手RVC:10分钟打造专属AI语音模型的终极指南
  • GitHub汉化插件终极指南:五分钟实现中文界面的完整教程
  • 风云T9L上市,仅12.99万元起,引领中型混动SUV进入“235”时代
  • AMD Ryzen调试工具终极指南:解锁处理器隐藏性能的简单方法
  • 4月14日成都地区正大产镀锌管(Q235B;内径DN15-200mm)现货报价 - 四川盛世钢联营销中心
  • 【2026AI工程化分水岭】:SITS2026主会场重磅发布——AIAgent持续学习的3阶段演进路线图与2027淘汰预警
  • Zotero引用插件终极指南:3步搞定Word文献自动化管理
  • Noto字体终极指南:如何免费获得900+语言支持的完整字体解决方案
  • 吉利i-HEV智擎混动技术发布,重新定义新一代油电混动
  • EldenRingSaveCopier:艾尔登法环存档备份与迁移的终极解决方案
  • PCB模块化设计13——LVDS高速差分信号布线中的阻抗控制与优化策略
  • 3分钟解锁Windows 12网页版:无需安装的云端操作系统完整体验