Keras.metrics中的 accuracy 总结
## Keras.metrics中的 accuracy 总结
1. 背景
Accuracy(准确率)是机器学习中最简单的一种评价模型好坏的指标,每一个从事机器学习工作的人一定都使用过这个指标。没从事过机器学习的人大都也知道这个指标,比如你去向别人推销一款自己做出来的字符识别软件,人家一定会问你准确率是多少。准确率听起来简单,但不是所有人都能理解得透彻,本文将介绍Keras中accuracy(也适用于Tensorflow)的几个新“玩法”。
2. Keras中的accuracy介绍
Keras.metrics中总共给出了6种accuracy,如下图所示:
接下来将对这些accuracy进行逐个介绍。
1) accuracy
该accuracy就是大家熟知的最朴素的accuracy。比如我们有6个样本,其真实标签y_true为[0, 1, 3, 3, 4, 2],但被一个模型预测为了[0, 1, 3, 4, 4, 4],即y_pred=[0, 1, 3, 4, 4, 4],那么该模型的accuracy=4/6=66.67%。
2) binary_accuracy
binary_accuracy和accuracy最大的不同就是,它适用于2分类的情况。从上图中可以看到binary_accuracy的计算除了y_true和y_pred外,还有一个threshold参数,该参数默认为0.5。比如有6个样本,其y_true为[0, 0, 0, 1, 1, 0],y_pred为[0.2, 0.3, 0.6, 0.7, 0.8, 0.1],那么其binary_accuracy=5/6=87.5%。具体计算方法为:1)将y_pred中的每个预测值和threshold对比,大于threshold的设为1,小于等于threshold的设为0,得到y_pred_new=[0, 0, 1, 1, 1, 0];2)将y_true和y_pred_new代入到2.1中计算得到最终的binary_accuracy=87.5%。
3) categorical_accuracy
categorical_accuracy和accuracy也很像。不同的是accuracy针对的是y_true和y_pred都为具体标签的情况,而categorical_accuracy针对的是y_true为onehot标签,y_pred为向量的情况。比如有4个样本,其y_true为[[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0]],y_pred为[[0.1, 0.6, 0.3], [0.2, 0.7, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],则其categorical_accuracy为75%。具体计算方法为:1)将y_true转为非onehot的形式,即y_true_new=[2, 1, 1, 0];2)根据y_pred中的每个样本预测的分数得到y_pred_new=[1, 1, 1, 0];3)将y_true_new和y_pred_new代入到2.1中计算得到最终的categorical_accuracy=75%。
4) sparse_categorical_accuracy
和categorical_accuracy功能一样,只是其y_true为非onehot的形式。比如有4个样本,其y_true为[2, 1, 1, 0],y_pred为[[0.1, 0.6, 0.3], [0.2, 0.7, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],则其categorical_accuracy为75%。具体计算方法为:1)根据y_pred中的每个样本预测的分数得到y_pred_new=[1, 1, 1, 0];2)将y_true和y_pred_new代入到2.1中计算得到最终的categorical_accuracy=75%。
5) top_k_categorical_accuracy
在categorical_accuracy的基础上加上top_k。categorical_accuracy要求样本在真值类别上的预测分数是在所有类别上预测分数的最大值,才算预测对,而top_k_categorical_accuracy只要求样本在真值类别上的预测分数排在其在所有类别上的预测分数的前k名就行。比如有4个样本,其y_true为[[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0]],y_pred为[[0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],根据前面知识我们可以计算得到其categorical_accuracy=50%,但是其top_k_categorical_accuracy是多少呢?答案跟k息息相关。如果k大于或等于3,其top_k_categorical_accuracy毫无疑问是100%,因为总共就3个类别。如果k小于3,那就要计算了,比如k=2,那么top_k_categorical_accuracy=75%。具体计算方法为:1)将y_true转为非onehot的形式,即y_true_new=[2, 1, 1, 0];2)计算y_pred的top_k的label,比如k=2时,y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];3)根据每个样本的真实标签是否在预测标签的top_k内来统计准确率,上述4个样本为例,2不在[0, 1]内,1在[0, 1]内,1在[0, 1]内,0在[0, 2]内,4个样本总共预测对了3个,因此k=2时top_k_categorical_accuracy=75%。说明一下,Keras中计算top_k_categorical_accuracy时默认的k值为5。
6) sparse_top_k_categorical_accuracy
和top_k_categorical_accuracy功能一样,只是其y_true为非onehot的形式。比如有4个样本,其y_true为[2, 1, 1, 0],y_pred为[[0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]]。计算sparse_top_k_categorical_accuracy的步骤如下:1)计算y_pred的top_k的label,比如k=2时,y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];2)根据每个样本的真实标签是否在预测标签的top_k内来统计准确率,上述4个样本为例,2不在[0, 1]内,1在[0, 1]内,1在[0, 1]内,0在[0, 2]内,4个样本总共预测对了3个,因此k=2时top_k_categorical_accuracy=75%。
3. 总结
综上,keras中的accuracy metric用法很多,大家可以根据自己的实际情况选择合适的accuracy metric。以下是几个比较常见的用法:
当你的标签和预测值都是具体的label index(如
y_true=[1, 2, 1], y_pred=[0, 1, 1])
时,用keras.metrics.accuracy
。当你的标签是具体的label index,而prediction是向量形式(如
y_true=[1, 2, 1], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]])
时,用keras.metrics.sparse_categorical_accuracy
。
3)当你的标签是onehot形式,而prediction是向量形式(如y_true=[[0, 1, 0], [0, 0, 1], [0, 1, 0]], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]]
)时,用keras.metrics.categorical_accuracy。
当然,还有其他更高级的用法,比如对每个类别的accuracy求平均,或者对每个类别的accuracy进行加权,或者对每个样本的accuracy进行加权等,不在本文的讨论范围,大家有兴趣可以去参考Tensorflow或者Keras的官方文档。
文章来源:知乎 https://zhuanlan.zhihu.com/p/95293440
Keras.metrics中的 accuracy 总结相关推荐
- keras.metrics中的accuracy
keras.metrics有六种accuracy,其使用的场景如下: accuracy 真实标签和模型预测均为标量,如真实标签为[0,1,1,0,2,0],模型输出的预测为[0,2,1,1,2,0], ...
- keras.metrics中各种metric的区别
(一)keras.metrics有五种accuracy https://blog.csdn.net/weixin_44866160/article/details/106437277?utm_medi ...
- keras.metrics有五种accuracy
keras.metrics有五种accuracy,其使用的场景如下: accuracy真实标签和模型预测均为标量,如真实标签为[0,1,1,0,2,0],模型输出的预测为[0,2,1,1,2,0],此 ...
- tf.keras.metrics.Accuracy;tf.keras.metrics.Precision;tf.keras.metrics.Recall
tf.keras.metrics.Accuracy:tf.keras.metrics.Precision:tf.keras.metrics.Recall 当标签为0/1,而prediction为(0, ...
- ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略
ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略 目录 sklearn.metrics中常用的函数参数 con ...
- TensorFlow2.0: keras.metrics的使用
keras.metrics中有两个api函数可以简化准确率acc和损失值loss的计算.其分别是metrics.Accuracy( )和metrics.Mean( ). 一.建立测量尺 #建立测量尺 ...
- keras.metrics解析
目录 前言 metrics原理解析(以metrics.Mean为例) 创建自定义metrics 创建无状态 metrics 通过继承Metric创建有状态 metrics add_metric() 方 ...
- 成功解决keras库中出现AttributeError: ‘str‘ object has no attribute ‘decode‘
成功解决keras库中出现AttributeError: 'str' object has no attribute 'decode' 目录 解决问题 解决思路 解决方法 解决问题 Attribute ...
- caffe中的Accuracy
Caffe 中的 Accuracy 是precision,即: 理解为你预测对的正例数,占预测正例总量的比率 如果要输出recall,而不是precision,accuracy_param里面有一个i ...
- 预先下载的keras库中神经网络模型指定存放路径及如何上传的问题
在使用keras库中内置的神经网络模型(以下简称网络模型)进行训练的时候,可能需要在每次运行训练文件时候都要重新从keras库中下载网络模型,尤其是在服务器终端运行的时候,每次下载的速度都极其慢,而且 ...
最新文章
- java rect offset_Rect 的相关操作
- zoj 1152 A Mathematical Curiosity
- python安装在什么系统下最好-自学python用什么系统好
- 梁俊斌:音频技术可以延展众多应用场景
- 工业以太网交换机选机攻略
- php mysql time_wait_[PHP]MySQL的wait_timeout与pdo对象
- 如何在Ubuntu 18.04上设置Apache虚拟主机
- 网站被黑被劫持跳转的症状与木马代码清除
- 3. Vue入门实战教程之vue-element-admin初体验
- 文件内存映射(一):它是什么
- Thinkpad T470 内置电池问题
- [论文解读]Deep active learning for object detection
- ES系列-- ILM索引生命周期管理
- 阿里云服务器1核1G内存1M带宽能放几个网站及多少流量
- 微服务网关搭建(podman+kong+konga)
- Bugzilla 使用教程
- rxjava2下载地址
- 什么是Web服务器,如何配置
- android mvp模式弊端,《android-MVP模式的困惑》
- Vue这样配置Axios