zoukankan      html  css  js  c++  java
  • torch 数组按顺序进行编号,用在hard negative mining

    在hard negative mining中,要负样本的得分进行排序,选取得分最高的参与训练。这就涉及到选取top-k个负样本或掩膜,因此要对数组按顺序进行编号。
    在pytorch中,torch.sort()函数可以返回排序好的数组和元素的索引,用两次torch.sort()函数即可以得到数组元素的编号。

    b = torch.rand(5)
    print(b)
    
    # 从小到大编号
    _, index = b.sort()
    _, order = index.sort()
    print(order)
    
    # 从大到小进编号
    _, index = b.sort(descending=True)
    _, order = index.sort()
    print(order)
    

    附上一段hard example mining

    def hard_negative_mining(loss, labels, neg_pos_ratio):
        """
        It used to suppress the presence of a large number of negative prediction.
        It works on image level not batch level.
        For any example/image, it keeps all the positive predictions and
         cut the number of negative predictions to make sure the ratio
         between the negative examples and positive examples is no more
         the given ratio for an image.
    
        Args:
            loss (N, num_priors): the loss for each example.
            labels (N, num_priors): the labels.
            neg_pos_ratio:  the ratio between the negative examples and positive examples.
        """
        pos_mask = labels > 0
        num_pos = pos_mask.long().sum(dim=1, keepdim=True)
        num_neg = num_pos * neg_pos_ratio
    
        loss[pos_mask] = -math.inf
        _, indexes = loss.sort(dim=1, descending=True)
        _, orders = indexes.sort(dim=1)
        neg_mask = orders < num_neg
        return pos_mask | neg_mask
    
  • 相关阅读:
    HTML5实现音频播放
    百度编辑器UEditor常用设置函数大全
    .Net一般处理程序来实现用户名的验证
    软件设计师13-数据库设计
    软件设计师12-数据流图
    百度云BCC安装WordPress镜像
    Java获取客户端真实IP地址
    软件设计师11-面向对象技术
    百度云BCC主机宝镜像
    软件设计师10-系统开发模型
  • 原文地址:https://www.cnblogs.com/zi-wang/p/12292585.html
Copyright © 2011-2022 走看看