天天看点

sigmoid和softmax激活函数的简单理解

使用softmax和sigmoid激活函数来做多类分类和多标签分类

    在实际应用中,一般将softmax用于多类分类的使用之中,而将sigmoid用于多标签分类之中,对于图像处理而言,网络模型抽取图像特征的结构基本相同,只是根据不同的任务改变全连接层后的输出层。下面介绍如何使用softmax和sigmoid完成对应的分类任务。

softmax激活函数应用于多类分类

    假设神经网络模型的最后一层的全连接层输出的是一维向量logits=[1,2,3,4,5,6,7,8],这里假设总共类别数量为8,使用softmax分类器完成多类分类问题,并将损失函数设置为categorical_crossentropy损失函数:

用tensorflow实现:

tf.argmax(tf.softmax(logits))

    首先用softmax将logits转换成一个概率分布,然后取概率值最大的作为样本的分类 。softmax的主要作用其实是在计算交叉熵上,将logits转换成一个概率分布后再来计算,然后取概率分布中最大的作为最终的分类结果,这就是将softmax激活函数应用于多分类中。

sigmoid激活函数应用于多标签分类

    sigmoid一般不用来做多类分类,而是用来做二分类,它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别,否则不属于某个类别。这一属性使得其适合应用于多标签分类之中,在多标签分类中,大多使用binary_crossentropy损失函数。它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别。本质上其实就是针对logits中每个分类计算的结果分别作用一个sigmoid分类器,分别判定样本是否属于某个类别同样假设,神经网络模型最后的输出是这样一个向量logits=[1,2,3,4,5,6,7,8], 就是神经网络最终的全连接的输出。这里假设总共有8个分类。通过:

tf.sigmoid(logits)

    sigmoid应该会将logits中每个数字都变成[0,1]之间的概率值,假设结果为[0.03,0,6, 0.2, 0.5, 0.09, 0.1, 0.7, 0.1], 然后设置一个概率阈值,比如0.4,如果概率值大于0.4,则判定类别符合,那么该输入样本则会被判定为类别2、类别4以及类别7。即一个样本具有多个标签。

在这里强调一点:将sigmoid激活函数应用于多标签分类时,其损失函数应设置为binary_crossentropy。

继续阅读