【Pytorch】多标签分类,分类指标计算,按阈值,或者概率最大的前top个标签【sigmoid + BCELoss】

from: https://github.com/Sun-DongYang/Pytorch/blob/master/multiLabel/multiLabel.py

多标签计算准确率的方式:按阈值,或者概率最大的前top个标签

# 计算准确率——方式1
# 设定一个阈值,当预测的概率值大于这个阈值,则认为这幅图像中含有这类标签
def calculate_acuracy_mode_one(model_pred, labels):
    # 注意这里的model_pred是经过sigmoid处理的,sigmoid处理后可以视为预测是这一类的概率
    # 预测结果,大于这个阈值则视为预测正确
    accuracy_th = 0.5
    pred_result = model_pred > accuracy_th
    pred_result = pred_result.float()
    pred_one_num = torch.sum(pred_result)
    if pred_one_num == 0:
        return 0, 0
    target_one_num = torch.sum(labels)
    true_predict_num = torch.sum(pred_result * labels)
    # 模型预测的结果中有多少个是正确的
    precision = true_predict_num / pred_one_num
    # 模型预测正确的结果中,占所有真实标签的数量
    recall = true_predict_num / target_one_num

    return precision.item(), recall.item()

# 计算准确率——方式2
# 取预测概率最大的前top个标签,作为模型的预测结果
def calculate_acuracy_mode_two(model_pred, labels):
    # 取前top个预测结果作为模型的预测结果
    precision = 0
    recall = 0
    top = 5
    # 对预测结果进行按概率值进行降序排列,取概率最大的top个结果作为模型的预测结果
    pred_label_locate = torch.argsort(model_pred, descending=True)[:, 0:top]
    for i in range(model_pred.shape[0]):
        temp_label = torch.zeros(1, model_pred.shape[1])
        temp_label[0,pred_label_locate[i]] = 1
        target_one_num = torch.sum(labels[i])
        true_predict_num = torch.sum(temp_label * labels[i])
        # 对每一幅图像进行预测准确率的计算
        precision += true_predict_num / top
        # 对每一幅图像进行预测查全率的计算
        recall += true_predict_num / target_one_num
    return precision, recall
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个流行的开源深度学习框架,它提供了丰富的工具和功能来进行多标签分类任务。多标签分类是指一个样本可以属于多个类别,每个类别之间是相互独立的。 在PyTorch中进行多标签分类,我们可以按照以下步骤进行操作: 1. 数据准备:首先,需要准备好带有标签的训练数据集和验证数据集。每个样本应该有一个对应的输入和一个标签标签是一个二进制向量,其中每个元素表示一个类别,1代表属于该类别,0代表不属于该类别。 2. 构建模型:使用PyTorch的nn模块构建多标签分类模型。可以选择使用现有的预训练模型作为基础模型,也可以自己设计模型。在模型最后一层使用sigmoid激活函数,而不是常用的softmax激活函数,因为sigmoid可以输出独立的概率值而softmax输出的是归一化的概率分布。 3. 定义损失函数和优化器:对于多标签分类任务,常用的损失函数是二分类问题的交叉熵损失,可以使用PyTorch中的BCELoss函数。优化器可以选择常用的Adam或SGD等。 4. 训练模型:按照一般的PyTorch训练流程,将输入样本和标签传入模型,计算损失,进行反向传播和参数更新。 5. 模型评估:通过验证数据集评估模型的性能,可以使用F1 score、accuracy或者precision/recall等指标。可以使用PyTorch中的函数计算这些指标。 以上就是使用PyTorch进行多标签分类的基本步骤。需要注意的是,在数据准备过程中要保证数据类别平衡,训练样本足够丰富,模型设计合理,调整超参数来提高模型性能。多标签分类任务可以应用于很多实际问题,如图像标签分类、文本标签分类等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值