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

如何将NeuralProphet优化器设为SDG而非AdamW及报错排查

问题1:如何在NeuralProphet中将优化器从AdamW设置为SGD?

在初始化NeuralProphet模型时,直接通过optimizer参数指定为'SGD'即可,注意拼写是SGD(而非代码中的SDG):

m = NeuralProphet(optimizer='SGD', learning_rate=0.01)

如果需要自定义SGD的进阶参数(如动量),可以传入PyTorch的SGD实例并搭配optimizer_args:

from torch.optim import SGD
m = NeuralProphet(optimizer=SGD, optimizer_args={"momentum": 0.9})

问题2:代码报错排查

核心错误点

  1. 优化器名称拼写错误:你代码中写的optimizer = 'SDG'是错误的,NeuralProphet仅识别'SGD'作为随机梯度下降优化器的名称,拼写错误直接触发参数不兼容报错。
  2. 参数取值不合理:
    • n_lags=(2*7*24*12):5分钟分辨率下,2周的lags对应4032个时间步,这个维度会导致模型输入规模过大,不仅内存占用爆炸,还会引发数值不稳定问题。建议先缩小lags范围,比如尝试1天的lags(24*12=288)。
    • learning_rate = 0.1:SGD的学习率0.1过高,通常SGD的合理学习率范围在0.001-0.01之间,过高的学习率会导致损失函数震荡、无法收敛,甚至触发NaN/Inf类报错。
  3. 节假日特征潜在问题:add_country_holidays默认窗口范围与5分钟高分辨率数据不匹配,建议显式指定窗口参数,避免特征生成异常。

修正后的代码示例

m = NeuralProphet(
    n_forecasts=2*24*12,
    n_lags=24*12,  # 先尝试1天的lags,后续按需调整
    yearly_seasonality="auto",
    weekly_seasonality="auto",  
    daily_seasonality="auto", 
    growth="off", 
    seasonality_reg=0.5, 
    optimizer='SGD',  # 修正拼写错误
    learning_rate=0.01,  # 降低学习率至合理范围
    n_changepoints="auto", 
    changepoints_range="auto"
)
m.add_country_holidays("US", mode="additive", lower_window=-1, upper_window=1)
metrics = m.fit(L12M, freq="5min")

额外排查建议

  • 验证数据集L12M的ds列是否为标准datetime格式,无缺失或异常时间戳;
  • 检查y列是否存在NaN、Inf等异常值,可通过L12M.isnull().sum()和L12M.describe()快速验证;
  • 若仍报错,可先注释add_country_holidays代码,逐步排查是否为节假日特征模块导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:27:12