使用torch.bincount计算标签的重叠度

def count_integer_overlap(rec_labels, true_labels, maxlength=50527):

    # much faster (measured with timeit:)
    if rec_labels is not None:
        test_label_acc = (
            1
            - (
                torch.bincount(rec_labels.view(-1), minlength=maxlength)
                - torch.bincount(true_labels[true_labels != -100].view(-1), minlength=maxlength)
            )
            .abs()
            .sum()
            / 2
            / rec_labels.numel()
        )
    else:
        test_label_acc = 0
    return test_label_acc

假设 rec_labels 是一个张量 [0, 1, 1, 2, 3, 3],而 true_labels[1, 1, 2, 3, -100, -100]。其中 -100 表示缺失的标签。

  1. 计算标签的出现次数: 使用 torch.bincount 方法,我们得到以下结果:

    • 对于 rec_labels,标签 0 出现了 1 次,标签 1 出现了 2 次,标签 2 出现了 1 次,标签 3 出现了 2 次,其他标签均未出现。
    • 对于 true_labels,标签 1 出现了 2 次,标签 2 出现了 1 次,标签 3 出现了 1 次。
  2. 调整计数以排除缺失的标签:true_labels 中,我们需要忽略 -100 标签的计数。

  3. 计算绝对差异: 将两个张量的计数相减,并取绝对值。我们得到以下差异:

    • 对于标签 0,差异为 1 - 0 = 1
    • 对于标签 1,差异为 2 - 2 = 0
    • 对于标签 2,差异为 1 - 1 = 0
    • 对于标签 3,差异为 2 - 1 = 1
  4. 求和并归一化: 将这些差异相加得到总的绝对差异,然后除以标签总数的两倍。在这个例子中,总的绝对差异为 1 + 0 + 0 + 1 = 2,标签总数为 6,所以重叠度为 2 / (2 * 6) = 1/6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值