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

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


1.概念介绍

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

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

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

 

2.问题分析

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

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能帮到咱们。code

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

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

相关文章
相关标签/搜索