[开发技巧]·TopN指标计算方法
2024-09-01 02:16:50
[开发技巧]·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,正确地完成了我们设想的功能。
最新文章
- 模块化之Spring3.0 web fragment和gradle构建项目
- C++基础知识(5)---类和对象
- svn上传工程之后下载,打开下载之后的工程缺少文件
- Sea.js学习3——Sea.js的CMD 模块定义规范
- [POJ 1155] TELE (树形dp)
- 4-Highcharts 3D图之3D普通饼图
- 对Java不能多继承,只能单继承,却可以实现多个接口的理解
- linux安装apache软件的过程
- 回调函数的意义以及python实现
- HDU 3265 Posters(线段树)
- 一个Restful Api的访问控制方法
- 用DIV+CSS做网页里要设置body和*规定内容
- CodeForces 614B Gena's Code
- java 与操作系统进程同步问题(一)————互斥问题
- Java7里try-with-resources分析
- HTMLParser和BeautifulSoup使用入门和总结
- postgresql 清空数据表 truncate
- 【Java深入研究】7、ThreadLocal详解
- phpcms9-6-0 一键getshell工具
- uva-10716-贪心