python - torch.softmax 和 torch.sigmoid 在二进制情况下不等价

标签 python math pytorch softmax sigmoid

鉴于:

x_batch = torch.tensor([[-0.3, -0.7], [0.3, 0.7], [1.1, -0.7], [-1.1, 0.7]])
然后申请 torch.sigmoid(x_batch) :
tensor([[0.4256, 0.3318],
        [0.5744, 0.6682],
        [0.7503, 0.3318],
        [0.2497, 0.6682]])
给出了与 torch.softmax(x_batch,dim=1) 完全不同的结果:
tensor([[0.5987, 0.4013],
        [0.4013, 0.5987],
        [0.8581, 0.1419],
        [0.1419, 0.8581]])
根据我的理解,softmax 是不是与二进制情况下的 sigmoid 完全相同?

最佳答案

你被误导了。 Sigmoid 和 softmax 不相等,即使对于 2 元素情况也是如此。
考虑 x = [x1, x2] .

sigmoid(x1) = 1 / (1 + exp(-x1))
softmax(x1) = exp(x1) / (exp(x1) + exp(x2))
            = 1 / (1 + exp(-x1)/exp(-x2))
            = 1 / (1 + exp(-(x1 - x2))
            = sigmoid(x1 - x2)
从代数我们可以看到一个等价的关系是
softmax(x, dim=1) = sigmoid(x - fliplr(x))
或在pytorch
x_softmax = torch.sigmoid(x_batch - torch.flip(x_batch, dims=(1,))

关于python - torch.softmax 和 torch.sigmoid 在二进制情况下不等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539767/

相关文章:

c++ - BigInt 计算器吐出稍微错误的结果

javascript - 计算随机生成的六边形的6个顶点

python - 为什么在使用 Deep Q 学习时会弹出此错误?

python - Pytorch 上具有相同标签的批处理点

python - DJANGO:如何允许用户更改密码?

python - 从 pandas 数据框中的索引获取前后行

python - 在python 3中打印set容器时,它打印时没有顺序

python - PyDev 不执行将当前行发送到控制台的快捷方式

math - 如何比较两条曲线(点数组)

deep-learning - 直接训练 Transformer Encoder 层以及填充序列的正确方法