• 关于softmax、argmax、softargmax


    关于softmax、argmax、softargmax

     

    在阅读LIFT:Learned Invariant Feature Transform一文时,文中第1节提到为了保证端到端的可微性,利用softargmax来代替传统的NMS(非极大值抑制)来挑选极值点位置。由于只了解softmax,对于softargmax不甚了解,所以记录下来。

    1)softmax:

    输入为向量,输出为值为0-1之间的向量,和为1。在分类任务中作为概率出现在交叉熵损失函数中。

    import numpy as np
    data=np.array([0.1, 0.3, 0.6, 2.1 ,0.55])
    np.exp(data)/np.sum(np.exp(data))          # softmax

    array([ 0.07795756,  0.09521758,  0.12853029,  0.57603278,  0.12226179])

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

    此时最大值所处的坐标期望即为:

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

    2.5694236670240085。而最大之所在的位置应该是3。

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

    softargmax: 

    可以看到,上式与softmax的期望只有一个差别,即给向量的每个元素乘以beta。

    >>>d = data*10       # beta=10
    array([  1. ,   3. ,   6. ,  21. ,   5.5])
    >>> np.sum(np.exp(d)/np.sum(np.exp(d)) *np.array([0,1,2,3,4]))
    2.9999998429934758

    可见此时输出的坐标为2.99,即为3,且这种寻找极值所在位置(坐标)的方法是可微的。常用于图像特征点位置的提取。 

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

    Ref:

    IFT6266 PROJECT

  • 相关阅读:
    css3 flex
    多行文本溢出 显示... 判断是否多行文本溢出
    事件多次执行
    WinForm布局
    winform 公共控件
    WinForm窗体菜单和工具栏
    2017-4-24WinForm 基础
    2017-4-20实体类,数据访问类.字符串攻击.防攻击
    ADO.net增删改查
    类库,通用变量,is/as运算符,委托。
  • 原文地址:https://www.cnblogs.com/adong7639/p/10148043.html
Copyright © 2020-2023  润新知