问题描述
我在模型结尾处使用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的结果为负,则不可能,这可能是实现失败的原因。