/pytorch/aten/src/TH/generic/THTensorRandom.cpp:325 处的无效多项式分布(遇到概率条目 < 0)
Invalid multinomial distribution (encountering probability entry < 0) at /pytorch/aten/src/TH/generic/THTensorRandom.cpp:325
我有一个名为 out_probs
的 PyTorch
张量,它是这样产生的:
out_probs=F.softmax(out_dec[:,0],dim=0)
另外,out_probs
的形状是[128,20004]
out_probs
是 softmax 运算的结果,它不应该包含任何负值,所以自然 out_probs[out_probs<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
这意味着我的张量有一个负项,我不知道为什么会这样?
我相信您在 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
我有一个名为 out_probs
的 PyTorch
张量,它是这样产生的:
out_probs=F.softmax(out_dec[:,0],dim=0)
另外,out_probs
的形状是[128,20004]
out_probs
是 softmax 运算的结果,它不应该包含任何负值,所以自然 out_probs[out_probs<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
这意味着我的张量有一个负项,我不知道为什么会这样?
我相信您在 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