tf.nn.sigmoid_cross_entropy_with_logits

时间:2019-04-18
本文章向大家介绍tf.nn.sigmoid_cross_entropy_with_logits,主要包括tf.nn.sigmoid_cross_entropy_with_logits使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

tf.nn.sigmoid_cross_entropy_with_logits

这个函数适用于多标签分类是的损失函数(即类别和类别之间是相互独立的,不互斥的)

tf.nn.sigmoid_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

参数说明

计算网络输出logits和标签labels的sigmoid cross entropy loss,衡量独立不互斥离散分类任务的误差,说独立不互斥离散分类任务是因为,在这些任务中类与类之间是独立但是不互斥的,拿多分类任务中的多目标检测来举例子,一张图中可以有各种instance,比如有一只狗和一只猫。对于一个总共有五类的多目标检测任务,假如网络的输出层有5个节点,label的形式是[1,1,0,0,1]这种,1表示该图片有某种instance,0表示没有。那么,每个instance在这张图中有没有这显然是独立事件,但是多个instance可以存在一张图中,这就说明事件们并不是互斥的。所以我们可以直接将网络的输出用作该方法的logits输入,从而进行输出与label的cross entropy loss。

labels和logits的形状都是[batch_size, num_classes],那么如何计算他们的交叉熵呢,毕竟它们都不是有效的概率分布(一个batch内输出结果经过sigmoid后和不为1)。其实loss的计算是首先使用二分类交叉熵单独计算每个类别的损失,方法返回的loss的形状和labels是相同的,也是[batch_size, num_classes],再调用reduce_mean方法计算batch内的平均loss。作为最终的loss