博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊一聊rank-1和rank-5准确度
阅读量:5879 次
发布时间:2019-06-19

本文共 1918 字,大约阅读时间需要 6 分钟。

在我们看来,计算机就是一台严丝合缝、精密运转的机器,严格按照程序员下达的指令工作。虽然产品上线之后经常碰到迷之问题,但我们通常会检讨程序设计得不够完美,而不会认为这是理所当然。因为我们相信只要程序设计严谨,将各种意外情况考虑在内,就会消除这种不确定问题。

然而到了机器学习,特别是深度学习,很多结果都是以概率的形式提供的。就拿图片分类来说,通常模型预测出图片属于每个类别的概率,而不是直接给出一个确定的结果。这就如同天气预报员预报明天的天气:晴天的概率多少多少,下雨的概率多少多少。估计如果这样预报天气,很多人会抓狂。问题是,天气预报说明天是晴天,明天就一定是晴天吗?这其实仍然是一个概率问题。虽然我们掌握了足够的气象资料,天气预报也越来越准确,但是我们依然无法保证每次都是准确的。

既然在深度学习中分类问题是各类别的概率,我们很容易选择一种策略:某个类别的概率最高,我们就认为预测结果属于哪种类别。比如下面这张蛙的图片:

使用CIFAR-10数据集训练出的模型进行推断,各个类别的概率如下:

其中,Frog类别的概率最大,我们就认为这张图片所属的类别为Frog。

计算模型准确度的方法也非常简单:

  • 步骤#1:计算数据集中每个输入图像的类别标签的概率。
  • 步骤#2:确定真实标签是否等于具有最大概率的预测类别标签。
  • 步骤#3:计算步骤#2为真的次数,然后除以总的测试图片数量。

这种度量也称之为rank-1准确度,这也是一种非常直观的度量方式。然而,最近几乎所有在ImageNet数据集上评估的机器学习模型的论文都不仅给出了rank-1准确度,还给出了rank-5准确度。

顾名思义,rank-5准确度选取5个最大概率的类别,只要这5个类别中的一个和真实标签相同,该预测结果就为真。rank-5准确度的计算方法如下:

  • 步骤#1:计算数据集中每个输入图像的类别标签的概率。
  • 步骤#2:按降序对预测的类别标签概率进行排序。
  • 步骤#3:确定真实标签是否存在于步骤#2的前5个预测标签中。
  • 步骤#4:计算步骤#3为真的次数,然后除以总的测试图片数量。

rank-1和rank-5的代码实现也非常简单:

def rank5_accuracy(preds, labels):  # initialize the rank-1 and rank-5 accuracies  rank1 = 0  rank5 = 0  # loop over the predictions and ground-truth labels  for (p, gt) in zip(preds, labels):    # sort the probabilities by their index in descending    # order so that the more confident guesses are at the    # front of the list    p = np.argsort(p)[::-1]    if gt in p[:5]:      rank5 += 1    if gt == p[0]:      rank1 +=1  # compute the final rank-1 and rank-5 accuracies  rank1 /= float(len(labels))  rank5 /= float(len(labels))  return (rank1, rank5)复制代码

有朋友可能会觉得,这个机器学习也太不靠谱了吧!不能给出一个精确的结果也就算了,还给出5个模凌两可的答案。在CIFAR-10这样的小数据集上,因为总的类别很少,如果还统计rank-5准确率,的确有点傻,但是考虑到ImageNet这样超大规模的数据集,其类别有成千上万个,特别是某些较小的类目,比如如下两张图片:

普通人也很难分辨出其类别不同。所以在某些大型图片分类模型任务中,rank-5准确率可以提供一个对rank-1准确率的一个补充。

理想情况下,rank-1准确度将与rank-5准确度同步增加,但是在具有挑战性的数据集上,情况并非总是如此。因此,我们还会检查rank-5的准确度,以确保我们的网络在rank-1准确度停滞不前时仍然在“学习”。

以上实例均有完整的代码,点击阅读原文,跳转到我在github上建的示例代码。

另外,我在阅读《Deep Learning for Computer Vision with Python》这本书,在微信公众号后台回复“计算机视觉”关键字,可以免费下载这本书的电子版。

往期回顾

转载地址:http://dycix.baihongyu.com/

你可能感兴趣的文章
JS 在火狐浏览器下关闭弹窗
查看>>
MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回...
查看>>
Linux ad7606 驱动
查看>>
安装 RabbitMQ C#使用-摘自网络(包括RabbitMQ的配置)
查看>>
Linux 防火墙iptables命令详解
查看>>
JAVA入门[6]-Mybatis简单示例
查看>>
Spring定时任务的几种实现
查看>>
ZoomIt(投影演示辅助软件)下载、安装与运行使用
查看>>
IntelliJ IDEA JRebel Maven Tomcat 实现热部署
查看>>
Java通过join方法来暂停当前线程
查看>>
源码分析——Action代理类的工作
查看>>
spring 在service中需要抛出异常才能自动回滚
查看>>
人脸数据库大全(包括人脸识别、关键点检测、表情识别,人脸姿态等等)
查看>>
iOS UITableView表视图滚动隐藏UINavigationController导航栏
查看>>
SDL如何嵌入到QT中?!
查看>>
$(document).ready()
查看>>
RunLoop总结:RunLoop的应用场景(四)
查看>>
8个很实用的在线工具来提高你的Web设计和开发能力
查看>>
P1026 统计单词个数
查看>>
AndroidStudio EventBus报错解决方法its super classes have no public methods with the @Subscribe...
查看>>