Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算具有温度的鲁棒softmax函数?_Python_Probability_Numerical Stability - Fatal编程技术网

Python 如何计算具有温度的鲁棒softmax函数?

Python 如何计算具有温度的鲁棒softmax函数?,python,probability,numerical-stability,Python,Probability,Numerical Stability,这是从 我想要一个与此等效的函数: def softmax(x, tau): """ Returns softmax probabilities with temperature tau Input: x -- 1-dimensional array Output: s -- 1-dimensional array """ e_x = np.exp(x / tau) return e_x / e_x.sum() 这是稳定和稳健的

这是从

我想要一个与此等效的函数:

def softmax(x, tau):
    """ Returns softmax probabilities with temperature tau
        Input:  x -- 1-dimensional array
        Output: s -- 1-dimensional array
    """
    e_x = np.exp(x / tau)
    return e_x / e_x.sum()
这是稳定和稳健的,即对于较小的
tau
,或较大的
x
,它不会溢出。由于这将用于计算概率,因此输出的总和应为1

换句话说,我正在传递一些值(和温度),我希望输出一个概率数组,用输入和tau“缩放”

示例:

In [3]: softmax(np.array([2,1,1,3]), 1)
Out[3]: array([ 0.22451524,  0.08259454,  0.08259454, 0.61029569])

In [5]: softmax(np.array([2,1,1,3]), 0.1)
Out[5]: array([  4.53978685e-05,   2.06106004e-09,   2.06106004e-09, 99954598e-01])

In [7]: softmax(np.array([2,1,1,3]), 5)
Out[7]: array([ 0.25914361,  0.21216884,  0.21216884,  0.31651871])
因此,当tau趋于0时,输出中的最高概率位于最高元素的位置。随着tau的增大,概率变得越来越接近


(可选)有关链接答案的问题。在这里,Neil给出了以下备选方案:

def nat_to_exp(q):
    max_q = max(0.0, np.max(q))
    rebased_q = q - max_q
    return np.exp(rebased_q - np.logaddexp(-max_q, np.logaddexp.reduce(rebased_q)))
但是,该输出的总和不是1,原因是该函数返回的分类分布只有
N-1
自由参数,最后一个参数是
1-sum(others)
。但在运行时,我注意到对于长度为3的向量,它返回长度为3的向量。那么,丢失的那个在哪里?我可以将其与上面的示例等效吗

为什么这个答案是稳定的?如何从
softmax
的简单公式中得出这一点


可能相关的问题:
但是没有温度

我已经向您解释过,我在输入和输出中省略了组件。之所以这样做,是因为softmax将分类分布的自然参数转换为期望参数。自然参数是可加的。如果你在输入中保留了额外的组件,那么你就失去了这个重要的属性。stackexchange。而且,由于您对添加温度感兴趣,您会发现在没有额外组件的情况下,这更容易实现,因为在本例中,TemeProperty是通过划分自然参数来实现的。Neil,很抱歉,我没有正确表达它。我明白你为什么要移除一个组件,但我不明白怎么做。我没有看到
q[:-1]
或任何类似的东西。如果省略了它,为什么输出的数量与输入的数量相同?组件和数组元素不一样吗?我不想首先传入它。你的
q
是从哪里来的?通常,
q
来自多项式逻辑回归,或者来自波尔兹曼机器中的信号