zoukankan      html  css  js  c++  java
  • [开发技巧]·TopN指标计算方法

    [开发技巧]·TopN指标计算方法


    1.概念介绍

    在图片分类的中经常可以看到Top-1,Top-5等TopN准确率(或者时错误率)。

    那这个TopN是什么意思呢?首先Top-1准确率最好理解,就是我们用argmax从网络输出取到的预测index与真实index的准确率。

    Top-5准确率就是指从网络输出取到的预测概率最大5个index与真实的index进行比对,5个之中任意一个比对成功就算预测正确了。同理Top-3就是指概率最大3个index.

     

    2.问题分析

    可以发现Top-1的准确率很容易计算直接通过argmax就可以了,演示代码如下:

    import numpy as np
    
    lists = np.array([0.4,0.2,0.3,0.1])
    
    index = np.argmax(lists)
    
    score = lists[index]
    

    大于1的时候就没法使用argmax了,其实在Numpy中有argsort能帮到我们。

    np.argmax的功能就是对list从小到大进行排序,最后输出排序过后每个元素本来的下标。下面用代码来解释一下:

    import numpy as np
    
    lists = np.array([0.4,0.2,0.3,0.1])
    
    indexs = np.argsort(lists)
    
    print(indexs)
    
    # [3 1 2 0]

    结果怎么理解呢?其实第一步先对[0.4,0.2,0.3,0.1] -->[0.1,0.2,0.3,0.4]排序,再对排序好的[0.1,0.2,0.3,0.4]找出每个元素原始下标,例如0.1的原始下标为3,0.2的下标为2 .. 最终得到[3 1 2 0]

    这个怎么应用到TopN计算中呢?其实就很容易了,可以利用argsort取得排好序元素的下标,再通过下标找到对应的概率值即可:以Top-3指标举例

    import numpy as np
    
    lists = np.array([0.4,0.2,0.3,0.1])
    
    def get_top_n(lists,n):
        sort_index = np.argsort(lists)
        n_index = sort_index[-n:]#因为是按照概率从大到小取n个
        indexs = []
        scores = []
        for index in reversed(n_index):#从大到小取,所以通过reversed()倒置一下
            indexs.append(index)
            scores.append(lists[index])
        return(indexs,socres)
    
    indexs,scores = get_top_n(lists,3)
    
    print(indexs,scores)
    #[0, 2, 1] [0.4, 0.3, 0.2]

    输出结果是[0, 2, 1] [0.4, 0.3, 0.2],表示0的种类概率0.4,正确地完成了我们设想的功能。

  • 相关阅读:
    新内容记录:
    一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块
    django后台获取相同name名的数据
    python 使用qqwry.dat获取ip物理地址:速度快
    laydate设置起始时间,laydate设置开始时间和结束时间
    评论抓取:Python爬取微信在APPStore上的评论内容及星级
    H5上传压缩图片
    Django自带的加密算法及加密模块
    git入门
    WPF
  • 原文地址:https://www.cnblogs.com/xiaosongshine/p/10858690.html
Copyright © 2011-2022 走看看