softmax之后值不在0-1之间是为什么


import torch
import torch.nn as nn
input_0 = torch.Tensor([1.4222e+01,  9.9372e+00,  2.5072e+00, -6.5985e+00, -1.0004e+01,
         -8.9475e+00, -1.0700e+01, -2.7447e+00, -4.8649e+00, -6.4698e+00,
         -4.4321e+00, -1.6125e+01, -1.2228e+01, -4.0457e+00,  6.3351e+00,
         -2.3921e+00, -1.1495e+01, -1.0952e+01])
input_1 = torch.Tensor([[1,2,3,4],[5,6,7,8]])

softmax_0 = nn.Softmax(dim=0)
softmax_1 = nn.Softmax(dim=1 )

output_0 = softmax_0(input_0)
output_1 = softmax_1(input_1)
output_2 = softmax_0(input_1)
a = softmax_0(output_0)

print(output_0)
print(output_1)
print(output_2)
print(a)

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
softmax函数是用于将输入转换为概率分布的函数。在输出结果中,每个元素都应该是介于0到1之间的值。但是,由于计算机内部浮点数的精度问题,在使用softmax函数时可能会遇到这样的情况,输出结果中某些元素的值略大于1或略小于0,但是这些值应该是非常接近于1或0的。如果出现输出结果中某些元素的值明显偏离了0到1之间,那么可能是由于softmax函数的输入值存在较大的范围差异,导致指数函数计算出现了数值上溢或下溢,从而影响了softmax函数的输出结果。在这种情况下,可以尝试对输入值进行归一化或缩放等预处理,以缓解数值精度问题。

看一下 softmax 函数曲线就知道,输出高度接近 0 或 1

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^