何为Top-1,Top-5
众所周知,神经网络预测类别是以概率的形式给出。
像这样:用一个CNN来预测图像6个类别:香蕉,苹果,大鸭梨,草莓,葡萄,大西瓜。
假设一个batch中有两条数据,batch_1和batch_2,(也就是有两张图像)。它们的label值为2(大鸭梨)和5(大西瓜)。
预测的概率值如下表所示
类别 | 香蕉 | 苹果 | 大鸭梨 | 草莓 | 葡萄 | 大西瓜 | label |
batch_1 | 0.05 | 0.2 | 0.3 | 0.2 | 0.2 | 0.15 | 2 |
batch_2 | 0.03 | 0.1 | 0.3 | 0.07 | 0.4 | 0.1 | 5 |
Top-1 就是去每个batch中没组数据中的最大概率值的分类。可以通过函数torch.topk(input, k, dim=None, largest=True, sorted=True, *, out=None)函数来获得 。
经过torch.topk将返回两个值,分别为:values和 indices。
例如上面的那个例子,
top-1 value = [0.3, 0.4]
top-1 indices =[2,4]
在计算准确率时,类别是对应的index值,所以讲top1 indices与label进行比较
[2,4] vs. [2,5] = [True,False] 准确率为1/2=0.5
同理,top-5 计算如下,准确率为100%。
top-5 value = [[0.3, 0.2, 0.2, 0.2, 0.15], [0.4, 0.3, 0.1, 0.1, 0.07]]
top-5 indices =[[2, 1, 3, 4, 5],[4, 2, 1, 5, 3]][[2, 1, 3, 4, 5], [[2],VS. = [True True] = 2/2=1[4, 2, 1, 5, 3]] [5]]
这也就是为什么top-5的值要大于top-1了,因为top-5的包容性更强。
以上就是我个人的理解,若有不正确的,请不吝赐教,大家一起进步!
以下是我找的一部分代码,具体出处不记得了。
import numpy as np
import torchdef cls_accuracy(output, target, topk=(1,)):maxk = max(topk)batch_size = target.size(0)_, pred = output.topk(maxk, 1, True, True)print("top-5 的 index:\n",pred)pred = pred.t()correct = pred.eq(target.view(1, -1).expand_as(pred))res = []for k in topk:correct_k = correct[:k].contiguous().view(-1).float().sum(0)res.append(correct_k / batch_size)return res
pre = np.random.randint(0,9,[4,10])
b = torch.from_numpy(pre)
print("预测的结果:\n",b)
label = np.random.randint(0,9,[4])
t = torch.from_numpy(label)acc=cls_accuracy(b, t, topk=(1,5))
print("top-1 acc:",acc[0],"\ntop-5 acc:",acc[1])
预测的结果:tensor([[6, 0, 2, 0, 1, 3, 1, 4, 1, 2],[7, 2, 8, 8, 1, 2, 5, 2, 5, 2],[4, 0, 5, 6, 6, 5, 8, 5, 1, 7],[2, 8, 4, 6, 6, 5, 4, 5, 3, 5]], dtype=torch.int32)
top-5 的 index:tensor([[0, 7, 5, 2, 9],[2, 3, 0, 6, 8],[6, 9, 3, 4, 2],[1, 3, 4, 5, 7]])
top-1 acc: tensor(0.5000)
top-5 acc: tensor(1.)
何为Top-1,Top-5相关推荐
- linux自动执行top,Linux top 命令使用
top命令结合jvm诊断工具jstack能够快速帮我们定位有问题的代码位置,输入top命令,运行图如下 CPU负载 第一行包括运行时间.当前时间.用户数量和系统平均负载,其中后面三个数字就是一分钟.五 ...
- oracle 当前top sql,Oracle top 查询TOP SQL
有时Oracle数据库服务器,系统CPU爆高,通过Top命令可以查看到占用CPU最高的进程 我们需要记住前几个TOP的pid号,带入下面的SQL,到数据库中查询运行的进程.服务器.用户.SQL.等待等 ...
- THE TOP FILE(top文件详解)
INTRODUCTION (1)top能实现一组机器部署不同业务环境,达到相互协调配合的工作. (2)top文件包含了计算机之间的映射关系以及配置文件角色的文件. (3)默认top文件被命名为top. ...
- mysql top virt_linux top命令VIRT,RES,SHR,DATA的含义
VIRT:virtual memory usage 虚拟内存1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据等 2.假如进程申请100m的内存,但实际只使用了10m,那 ...
- linux命令stat和top,Linux Top 命令解析 比较详细
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...
- linux命令stat和top,用top,du,df,ls,free,tree,stat命令更人性化显示数据
在 Linux 系统中怎么以人性化的方式显示数据,top,du,df,ls,free,tree,stat 命令怎样才能让其输出更易于理解的选项.让我们一起来了解这些技能.其实不是每个人都以二进制方式思 ...
- Linux 命令 top 学习总结
本文简介 概要: 学习总结 Linux 下的 top 命令 版本: Debian 5(Lenny), top: procps version 3.2.7 日期: 2010-11 ...
- 11 款可替代 top 命令的工具!
作者 | JackTian 来源 | 杰哥的IT之旅 在 Linux 环境下 top 命令都不陌生,它以实时动态的方式查看系统的整体运行情况,综合了多方信息监测系统性能和运行信息的实用工具,通 ...
- linux查进程ps和top,Linux中几个进程查看命令总结 ps, top, htop, vmstat
ps命令可以以快照的方式,一次显示所有或部分系统进程. ps a :当前和中断相关进程[root@centos ~]# ps a PID TTY STAT TIME COMMAND 23 ...
- Top 命令 如何查看linux系统中空闲内存/物理内存使用/剩余内存
1.top命令 top前5行统计信息 ** 第一行: top - 13:59:30 up 15 days, 4:53, 2 users, load average: 1.31, 1.62, 1.41 ...
最新文章
- 第九期直播|《深度相机与应用》精彩回顾
- AdvStringGrid 垂直居中 、水平居中
- !!基础---c# 下载网页+图片
- React中BrowserRouter与HashRouter的区别
- ubuntu 在线安装php,ubuntu在线安装LNMP
- 这才是晕了哟,dos之家上全是graybird???????????
- 将Surfer grd格网文件转成ArcGIS asc格式
- app上架oppo应用商店流程
- GPIO实现I2C从机的设计[1]
- ChatGPT套壳网站汇总-5月22日更新
- 休闲——漫威系列观影顺序
- 如何设置外部链接优化
- 【基础知识-高数-1】——雅可比行列式与“可逆性”证明一则
- 什么是VOIP和SIP?
- 自动驾驶系列(二) - 路径规划五种算法简述及对比
- IDC机房维护的成本,和托管的成本对比
- python查找文件并重命名_python复制文件并重命名
- 千万级支付对账系统怎么玩(上篇)?
- 计算机网络学习记录1
- 展开w ndows文件很慢,(Wndows优化大师的功能和使用方法分析.doc