适用场景:一个输入对应多个label,或输入类别间不互斥
调用函数:
1. Pytorch使用torch.nn.BCEloss
2. Tensorflow使用tf.losses.sigmoid_cross_entropy
3. Caffe使用SigmoidCrossEntropyLoss
在output和target之间构建binary cross entropy,其中i为每一个类。

以pytorch为例:Caffe,TensorFlow版本类比,输入均为相同形式的向量
m =nn.Sigmoid()
loss=nn.BCELoss()
input= autograd.Variable(torch.randn(3), requires_grad=True)
target= autograd.Variable(torch.FloatTensor(3).random_(2))
output=loss(m(input), target)
output.backward()
注意target的形式,要写成01编码形式,eg:如果同时为第一类和第三类则,[1, 0, 1]
主要是结合sigmoid来使用,经过classifier分类过后的输出为(batch_size,num_class)为每个数据的标签, 标签不是one-hot的主要体现在sigmoid输出之后,仍然为(batch_size

本文介绍了在多标签分类问题中如何使用Pytorch的nn.BCELoss、TensorFlow的tf.losses.sigmoid_cross_entropy以及Caffe的SigmoidCrossEntropyLoss。以Pytorch为例,详细展示了损失函数的计算过程,并强调目标变量需要以01编码形式表示。论文[CVPR2015]提出,多标签问题可以视为多个二分类问题,损失函数和分类分数有特殊设计。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=113680670&d=1&t=3&u=e309fd4a40304f0b8a66fadc439e7eab)
2154

被折叠的 条评论
为什么被折叠?



