PyTorch-softmax,argmax,soft-argmax

softmax

Softmax函数是一个非线性转换函数,通常用在网络输出的最后一层,输出的是概率分布(比如在多分类问题中,Softmax输出的是每个类别对应的概率),计算方式如下:
在这里插入图片描述

得到的是第i个位置对应的概率,每个位置的概率之和为1(可以看出Softmax仅进行计算,没有需要学习的参数)。

Pytorch softmax API

torch.nn.functional.softmax(input, dim=None, _stacklevel=3, dtype=None)

input是我们输入的数据,dim是在哪个维度进行Softmax操作(如果没有指定,默认dim=1)

softmax code example

  • numpy 实现
import numpy as np
data = np.array([0.1, 0.3, 0.6, 2.1 ,0.55])
a = np.exp(data)/np.sum(np.exp(data))
print(a)
print(sum(a))
'''输出
[0.07795756 0.09521758 0.12853029 0.57603278 0.12226179]
0.9999999999999999
'''

向量中的参数被归一化,总和为1

  • pytorch 实现
import torch
import torch.nn.functional as F
t_data = torch.from_numpy(data)
print(t_data)
print(t_data.shape)
print(t_data.type())
 
prob = F.softmax(t_data,dim=0) # dim = 0,在列上进行Softmax;dim=1,在行上进行Softmax
print(prob)
print(prob.shape)
print(prob.type())

'''output
tensor([0.1000, 0.3000, 0.6000, 2.1000, 0.5500], dtype=torch.float64)
torch.Size([5])
torch.DoubleTensor
tensor([0.0780, 0.0952, 0.1285, 0.5760, 0.1223], dtype=torch.float64)
torch.Size([5])
torch.DoubleTensor
'''

argmax

寻找参数最大值的索引,但是该过程不可导
在这里插入图片描述

soft-argmax

为了得到一个向量中最大值所处的位置,我们利用此函数。但是这个函数不可导,所以无法计算其梯度。然而我们可以利用软化的max函数来计算,就是softmax。利用softmax,我们可以得到每个元素正则化后的值。此向量()分布)的
在这里插入图片描述

np.sum(np.exp(data)/np.sum(np.exp(data)) * np.array([0,1,2,3,4]))    # E = p*index
'''output:
2.5694236670240085
'''

而最大之所在的位置应该是3。
从上面看到位置计算不够准确,一个原因就是最大值的概率不够大,或者说增大相对最大值而减弱其他值的影响就可以得到更加准确的位置坐标

在这里插入图片描述
可以看到,上式与softmax的期望只有一个差别,即给向量的每个元素乘以beta。
在这里插入图片描述
输出的坐标为2.99,即为3,且这种寻找极值所在位置(坐标)的方法是可微的。常用于图像特征点位置的提取。

此外,LIFT原文3.5节提到:softargmax作为非极大值抑制NMS的可微分版本。就是说可以利用softargmax来替代NMS。

参考文档

IFT6266 PROJECT
关于softmax、argmax、softargmax
pytorch softmax

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值