softmax和sigmoid函数用于输出层

时间:2016-12-31 14:46:29

标签: tensorflow computer-vision deep-learning theano keras

在与对象检测和语义分割相关的深度学习实现中,我已经看到使用sigmoid或softmax的输出层。我不是很清楚何时使用哪个?在我看来,他们俩都可以支持这些任务。这个选择有没有指导方针?

4 个答案:

答案 0 :(得分:10)

当您想要概率分布时,

softmax()会有所帮助,概率分布总和为1.当您希望输出范围从0到1,但不需要总和为1时,会使用sigmoid。 / p>

在您的情况下,您希望对两种选择进行分类和选择。我建议使用softmax(),因为您将获得一个可以应用交叉熵损失函数的概率分布。

答案 1 :(得分:2)

对象检测是在图像中的滑动窗口上使用的对象分类。在分类中,在某些类空间中找到正确的输出很重要。例如。你检测到10个不同的对象,你想知道哪个对象最有可能在那里。然后softmax是好的,因为它的探测是整个层总和为1.

另一方面,语义分割以某种方式对图像进行分割。我做了语义医学分割,输出是二进制图像。这意味着您可以使用sigmoid作为输出来预测此像素是否属于此特定类,因为每个输出类的sigmoid值介于0和1之间。

答案 2 :(得分:1)

一般情况下,当有'n'个类时,使用Softmax(Softmax分类器)。 Sigmoid或softmax都可以用于二元(n = 2)分类。

乙状结肠:             S(x)= 1 /(1+(e ^( - x)))

使用SoftMax:

         σ(x)j = e    /  **Σ**{k=1 to K} e^zk    for(j=1.....K)

Softmax是一种多类Sigmoid,但如果你看到Softmax的功能,所有softmax单位的总和应该是1.在sigmoid中它并不是真的必要。

深入挖掘,您也可以使用sigmoid进行多级分类。当你使用softmax时,基本上你得到每个类的概率(连接分布和多项式似然),其总和必然是1。如果你使用sigmoid进行多类分类,它就像边缘分布和伯努利似然,p(y0 / x),p(y1 / x)等

答案 3 :(得分:0)

S形和softmax函数具有不同的用途。有关何时在神经网络设计中使用Sigmoid和softmax的详细说明,请查看本文:"Classification: Sigmoid vs. Softmax."

简短摘要:

如果您有一个多标签分类问题,其中有多个“正确答案”(输出不是互斥的),则可以在每个原始输出上单独使用S形函数。乙状结肠将使您对所有班级,某些班级或全部班级都具有很高的概率。

如果您遇到的是多类分类问题,其中只有一个“正确答案”(输出是互斥的),请使用softmax函数。 softmax将强制您的输出类别的概率之和等于1,因此,为了增加特定类别的概率,您的模型必须相应地降低至少其他类别的概率。