/pytorch/aten/src/TH/generic/THTensorRandom.cpp:325上的无效多项式分布(遇到概率项<0)

时间:2019-08-23 14:04:51

标签: python pytorch tensor

我有一个名为PyTorch的{​​{1}}张量,其生成方式如下:

out_probs

此外,out_probs=F.softmax(out_dec[:,0],dim=0) 的形状为out_probs

[128,20004]是softmax操作的结果,它不应该包含任何负值,因此out_probs的结果自然将是一个空张量(实际上我检查过并且为空) 但是当我跑步时

out_probs[out_probs<0

我得到了:

torch.multinomial(out_probs, 1)

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

1 个答案:

答案 0 :(得分:2)

我相信您在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