You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch Forecasting中DeepAR两种预测绘图方式结果差异问询

问题原因与解决方法

核心差异来源

两种预测方式结果差异显著,主要源于以下几点:

  • 模型运行模式不同:forward()默认处于训练模式(model.train()),会保留dropout、BatchNorm等层的随机性训练行为;而predict()会自动切换到评估模式(model.eval()),关闭这些随机性操作,输出更稳定的结果分布。
  • 采样参数不一致:你在forward()中传入了n_samples=None,但predict()(mode="raw"模式)默认使用你配置的20次采样。DeepAR是概率模型,采样数量直接影响预测结果的分布范围,采样数不同必然导致可视化差异。
  • 数据处理流程差异:predict()会自动完成验证集的全流程处理,包括数据加载、归一化反转、时间窗口对齐等;而直接从val_dataloader取的x仅经过训练阶段预处理,缺少预测阶段的反归一化或窗口调整,导致数值尺度不匹配。
  • 样本匹配问题:next(iter(val_dataloader))取的是验证集首个批次,而predict()处理整个验证集后返回的x可能包含不同的窗口切片,idx=0对应的未必是同一个时间序列片段。

解决步骤

  1. 统一模型运行模式
    调用forward()前强制切换到评估模式并关闭梯度计算,消除训练层的随机性:

    net.eval()
    with torch.no_grad():
        x, y = next(iter(val_dataloader))
        out = net(x, n_samples=20)  # 与predict的采样数保持一致
    
  2. 对齐采样参数
    确保forward()的n_samples参数与predict()使用的采样数相同(如均设为20),保证两者的预测分布基于相同数量的采样样本。

  3. 同步数据处理流程
    若要对比同一样本,建议从predict()返回的x中提取对应样本传入forward(),或确保val_dataloader的输出与predict()的输入处理逻辑完全一致。另外,需手动对forward()的输出执行反归一化(net.transform_output()),因为predict()会自动完成这一步骤。

  4. 验证样本一致性
    对比两种方式下x的时间戳、特征值等信息,确认idx=0对应的是同一个时间序列片段,避免因批次窗口不同导致的样本不匹配。

内容的提问来源于stack exchange,提问作者DMC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:07:28