Pytorch Softmax提供了nans和负值作为输出

问题描述

我在模型结尾处使用softmax

但是,经过一些训练后,softmax给出的概率是负的。在某些情况下,我也遇到了nans。

我在搜索中发现的一种解决方案是使用归一化的softmax ...但是我为此找不到任何pytorch注入。

请有人帮忙告知是否有标准化的softmax或如何实现,以使向前和向后的传播变得顺畅。

请注意,我已经在使用torch.nn.utils.clip_grad_norm_(model.parameters(),40)以避免爆炸梯度

我正在使用pytorch 1.6.0

解决方法

Softmax始终会返回肯定结果,但会跟踪其他结果:

val dir = File("/proc/uid_stat/")

出局:

m = nn.Softmax(dim=1)
input = torch.randn(2,3)
print(input)
output = m(input)
output

您正在跟踪行。 请注意

tensor([[ 0.0983,0.4150,-1.1342],[ 0.3411,0.5553,0.0182]]) tensor([[0.3754,0.5152,0.1094],[0.3375,0.4181,0.2444]]) 你会得到 0.0983,-1.1342

0.3411,0.0182是最大的价值。

硬最大值(我们知道这是max())只会返回最大值。

因此,如果softmax的结果为负,则不可能,这可能是实现失败的原因。