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

PyTorch训练OpenAI Gym Pendulum智能体时Normal分布loc参数报错排查

报错原因说明

ValueError: The parameter loc has invalid values报错的核心原因是:传入torch.distributions.Normal的第一个参数(均值loc,对应代码中的out[0])包含非有限值(NaN、正无穷、负无穷),PyTorch分布类初始化时默认校验参数合法性,遇到非有限值就会抛出该错误。

此前out[1]未加绝对值时报scale参数错误也是同理:当时out[1]要么是负数,要么包含非有限值,加绝对值仅解决了负数问题,现在报错切换到loc,说明out[0]的非法值问题已显现。


触发场景及解决方法
  • 第一步先在初始化分布前增加参数校验,确认非法值存在:
out = Lorian(torch.tensor(observation))
# 新增校验代码
assert torch.isfinite(out[0]).all(), f"loc参数存在非法值: {out[0]}"
assert torch.isfinite(out[1]).all(), f"scale参数存在非法值: {out[1]}"
distro = torch.distributions.Normal(out[0], torch.absolute(out[1]))
  • 排查输入的observation是否本身包含NaN/inf,确认Pendulum环境返回的观测未被污染,转tensor时不要做易溢出的类型转换(比如直接将float64转为float16)。
  • 排查神经网络Lorian训练过程是否出现梯度爆炸:
    1. 适当降低学习率,避免参数更新步长过大导致溢出
    2. 反向传播后、优化器更新参数前增加梯度裁剪,限制梯度最大范数:
    torch.nn.utils.clip_grad_norm_(Lorian.parameters(), max_norm=1.0)
    
  • 检查损失函数计算逻辑,确认没有除0、对负数/0取对数等操作,这类操作会产生NaN,反向传播后会污染网络参数,最终导致前向输出非法值。

内容的提问来源于stack exchange,提问作者muk.kesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:01