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

使用torch.nn.functional.log_softmax处理概率向量出现数值异常

问题分析与解决

核心错误原因

你用错了函数的适用场景:

  • F.log_softmax的输入应该是模型输出的原始logits(未经过softmax的得分),它会先执行softmax把得分转成概率,再取对数。
  • 但你的pred已经是经过softmax后的概率向量了,再套log_softmax等于重复做了一次softmax+log,结果自然完全错误。

对应你的输出验证

看你给出的数值:

  • pred里第8个维度是0.99996,正常取对数应该是ln(0.99996)≈-4e-5,但你的log_probs里是-1.4612,明显不符。
  • 这是因为log_softmax会先把你的pred向量重新做softmax:由于0.99996远大于其他值,重新归一化后几乎所有概率都集中在这个维度,其他维度趋近于0,取对数后就出现了大部分维度数值相同、只有该维度是稍大负数的异常结果。

正确做法

直接对已有的概率向量取对数:

log_probs = torch.log(pred)

如果担心概率为0时torch.log会报错(数值不稳定),可以先给概率加个极小的下限:

log_probs = torch.log(torch.clamp(pred, min=1e-10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:43:22