【问题标题】:Invalid multinomial distribution (encountering probability entry < 0) at /pytorch/aten/src/TH/generic/THTensorRandom.cpp:325/pytorch/aten/src/TH/generic/THTensorRandom.cpp:325 处的无效多项分布(遇到概率条目 < 0)
【发布时间】:2019-08-23 14:04:51
【问题描述】:

我有一个名为 out_probsPyTorch 张量,其生成方式如下:

out_probs=F.softmax(out_dec[:,0],dim=0)

另外,out_probs 的形状是[128,20004]

out_probs 是 softmax 操作的结果,它不应该包含任何负值,所以自然out_probs[out_probs&lt;0 的结果将是一个空张量(实际上我检查过它是空的) 但是当我跑步时

torch.multinomial(out_probs, 1)

我明白了:

RuntimeError: invalid argument 2: invalid multinomial distribution (encountering probability entry < 0) at /pytorch/aten/src/TH/generic/THTensorRandom.cpp:325

这意味着我的张量有一个负输入,我不知道为什么会这样?

【问题讨论】:

    标签: python pytorch tensor


    【解决方案1】:

    我相信您在torch.multinomial 的错误报告中发现了一个错误。

    例如

    x = torch.ones(128, 1)
    x[0] *= 1e100
    out_probs = F.softmax(x, dim=0)
    print('Negative values:', torch.sum(out_probs < 0).item())
    y = torch.multinomial(out_probs, 1)
    

    产生以下输出

    Negative values: 0
    RuntimeError: invalid argument 2: invalid multinomial distribution (encountering probability entry < 0) at /pytorch/aten/src/TH/generic/THTensorRandom.cpp:298
    

    事实证明这是被触发的,因为out_probs 包含nan 条目。

    print('nan values:', torch.sum(torch.isnan(out_probs)).item())
    

    给予

    nan values: 128
    

    这是由 softmax 中的数学不稳定性引起的。

    奇怪的是,当out_probs 中的值是无限时,您会收到正确的错误消息

    RuntimeError: invalid argument 2: invalid multinomial distribution (encountering probability entry = infinity or NaN) at /pytorch/aten/src/TH/generic/THTensorRandom.cpp:302
    

    如果最新版本中尚未修复此错误,可能应该在https://github.com/pytorch/pytorch/issues 报告。

    顺便说一下,我使用的是 PyTorch 1.0.1.post2

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2021-05-03
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2014-04-24
      • 2014-08-14
      • 2021-09-10
      相关资源
      最近更新 更多