在了解多标签分类任务的损失函数和评价指标之前,我们都涉及多标签分类任务,主要关注的焦点是模型结构。 最近对多标签分类任务进行了讨论,其中有些不太清楚详细,我查了资料之后才了解,现在留下了这个记录。
多标签分类任务损失函数在二分类、多分类任务中通常使用交叉熵损失函数,即Pytorch中的CrossEntorpy,而在多标签分类任务中使用BCEWithLogitsLoss函数。
BCEWithLogitsLoss和CrossEntorpy的区别在于,在计算示例所属类的概率值时使用的计算函数不同。
1 ) CrossEntorpy使用softmax函数,即模型输出值作为softmax函数的输入,进而计算样本属于各类的概率,且通过softmax计算获得的类概率值的总和为1。
2 ) BCEWithLogitsLoss使用sigmoid函数,将模型输出值作为sigmoid函数的输入,计算出的多个类概率值的加法和加法不一定是1。
共同点是在计算概率值后继续计算预测概率值和真标签之间的交叉熵作为最终的损失函数值。
为什么在多标签任务中使用bcewithlogitsloss(sigmoid )函数呢? 个人理解如下。
1 ) 2分类/多分类任务从2个/多个类别中提取一个类别,每个类别相互排斥,从而确保多个类别的概率值之和为1 (如果类别的概率值之和为1,则一个类别的概率值增加
2 )多分类任务从多个类别中提取一个或多个类别,每个类别之间并不排他,因此不需要保证每个类别的概率总和为1,计算样本属于每个类别的概率即可, 如果属于某一类别的概率高于阈值,则表示样本属于该类别(在这种情况下,类别概率值的总和不一定为1 ),例如样本a是以BCEWithLogitsLoss函数计算出的类1、类2、类2
使用方法如下。
import torchimport torch.nn as nn#创建输入input=torch.tensor ([ 0.1,0.2,0.3 ],[ 0.4,0.5,0.6 ] )共有两个输入示例target=#创建模型并计算model=nn.linear。 (input_dim=3,hidden_dim=5) #其中,model_out=model )自由编写表示input )的模型
33559 www.Jian Shu.com/p/ac3 bec 3d de 3e
3359 gom bru.github.io/2018/05/23/cross _ entropy _ loss /
多标签任务评价指标二分类、多分类任务的评价指标使用sklearn中的classification_report,可以直观地输出每个类别的准确率、召回率、F1值,如下图所示。
sklearn的classification_report还可以用于多标签分类,如下图所示
但是,在多标签分类任务的输出结果中添加了“micro avg”和“samples avg”两个指标值,减少了“accuracy”的指标值。 个人认为“samples avg”指标值较有参考价值,站在样品角度衡量模型效应。 例如,样本a的预测标签是[ 1,1,samples avg或测量样本标签预测准确性的指标。 当然,也可以采用预测的准确度标签占总标签的比例作为表示样本标签的预测的准确度的指标(个人)。 我不知道samples avg是否有其他意义。
参考:
3359 blog.csdn.net/weixin _ 26731327/article/details/109122687
33559 www.it 1352.com/1586638.html