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,正确地完成了我们设想的功能。

  • 相关阅读:
    PHP的错误和异常处理
    异步并行批处理框架设计的一些思考
    系统出错信息设计
    SpringMVC+Shiro权限管理
    jstl教程
    为什么Lisp语言如此先进
    「只差程序员」为什么会招黑? [转自:知乎]
    大侠是怎样炼成的 周昆 [转]
    【OpenGL】glFinish()和glFlush()函数详解-[转]
    VC++ 6.0中实现三叉切分窗口与多视图 [转]
  • 原文地址:https://www.cnblogs.com/xiaosongshine/p/10858690.html
Copyright © 2011-2022 走看看