[开发技巧]·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,正确地完成了我们设想的功能。

[开发技巧]·TopN指标计算方法的更多相关文章

  1. Tornado开发技巧,简单了解tornado

    tornado基础入门(一)——简单了解tornado 参考:http://demo.pythoner.com/itt2zh/ch1.html tornado是一个轻量级的web框架,是一个用pyth ...

  2. SQL开发技巧(二)

    本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...

  3. DelphiXE2 DataSnap开发技巧收集

    DelphiXE2 DataSnap开发技巧收集 作者:  2012-08-07 09:12:52     分类:Delphi     标签: 作为DelphiXE2 DataSnap开发的私家锦囊, ...

  4. delphi XE5下安卓开发技巧

    delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...

  5. 经典收藏 50个jQuery Mobile开发技巧集萃

    http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 1.Backbone移动实例 这是在Safari中运行的一款Ba ...

  6. 移动 Web 开发技巧之(后续)

    昨天的<移动 Web 开发技巧>的这篇文章,大家反响不错,因为这些问题在大家日常写移动端的页面时经常遇到的.所以那个文章还是超级实用的,那么我们今天继续来分享一下移动端的web开发技巧吧, ...

  7. Maven 安装以及一些开发技巧

    解压 apache-maven-3.2.5 在conf ->sites中配置repository 的路径. Eclipse 配置 maven 2. 3. 一些小BUG 或开发技巧 eclipse ...

  8. thinkphp开发技巧经验分享

    thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...

  9. Java 8的五大开发技巧

    转载:http://geek.csdn.net/news/detail/94219 在Java 9发布之前,我们来分享一些Java 8开发技巧,本文翻译自JetBrains高级开发主管Trisha G ...

随机推荐

  1. 优秀.NET界面控件DevExpress v19.1.6全新来袭!新改进抢“鲜”看

    DevExpress Universal Subscription(又名DevExpress宇宙版或DXperience Universal Suite)是全球使用广泛的.NET用户界面控件套包,De ...

  2. python之爬取网页数据总结(一)

    今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests    Beautifulsoup4   lxml  三个插件 ...

  3. Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则

    1.创建一个类来实现AnnotationFormatterFactory接口 代码: package com.oukele.CustomAnnotation; import com.oukele.mo ...

  4. 命令方式 搭建 (简易)Maven项目

    原料:1.配好的Maven环境变量    2.c m d命令 win  + r  输入 cmd 切换到此项目所要存在的位置 使用命令创建文件夹 切换 到 maven_demo中  输入 cd mave ...

  5. 一个tornado框架下的文件上传案例

    html部分----使用了form表单,注意三要素 method="post"  action="/loaddata" enctype="multip ...

  6. CF293E Close Vertices 点分治+树状数组

    开始zz写了一个主席树,后来发现写个树状数组就行~ #include <cstdio> #include <vector> #include <algorithm> ...

  7. MySQL的字符集操作命令总结

    这篇文章主要介绍了MySQL的字符集操作命令总结,包括各种查看数据库.数据表等查询命令,需要的朋友可以参考下   以下均在mysql 5.5命令行中运行通过: 查看MySQL支持的字符集: 代码如下: ...

  8. luoguP3203 [HNOI2010]BOUNCE 弹飞绵羊

    P3203 [HNOI2010]BOUNCE 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonke ...

  9. 彩色图像--色彩空间 CMY(K)空间

    学习DIP第63天 转载请标明本文出处:***http://blog.csdn.net/tonyshengtan ***,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:http ...

  10. unittest详解(一) unittest初识

    unittest是python内置的一个单元测试框架,在学习怎么使用它之前,我们先来了解它的一些概念和原理. Test Case:测试用例,一个TestCase的实例就是一个测试用例.什么是测试用例呢 ...