Keras官方中文文档:性能评估Metrices详解


Posted in Python onJune 15, 2020

能评估

使用方法

性能评估模块提供了一系列用于模型性能评估的函数,这些函数在模型编译时由metrics关键字设置

性能评估函数类似与目标函数, 只不过该性能的评估结果讲不会用于训练.

可以通过字符串来使用域定义的性能评估函数

model.compile(loss='mean_squared_error',
    optimizer='sgd',
    metrics=['mae', 'acc'])

也可以自定义一个Theano/TensorFlow函数并使用之

from keras import metrics
 
model.compile(loss='mean_squared_error',
    optimizer='sgd',
    metrics=[metrics.mae, metrics.categorical_accuracy])

参数

y_true:真实标签,theano/tensorflow张量

y_pred:预测值, 与y_true形式相同的theano/tensorflow张量

返回值

单个用以代表输出各个数据点上均值的值

可用预定义张量

除fbeta_score额外拥有默认参数beta=1外,其他各个性能指标的参数均为y_true和y_pred

binary_accuracy: 对二分类问题,计算在所有预测值上的平均正确率

categorical_accuracy:对多分类问题,计算再所有预测值上的平均正确率

sparse_categorical_accuracy:与categorical_accuracy相同,在对稀疏的目标值预测时有用

top_k_categorical_accracy: 计算top-k正确率,当预测值的前k个值中存在目标类别即认为预测正确

sparse_top_k_categorical_accuracy:与top_k_categorical_accracy作用相同,但适用于稀疏情况

定制评估函数

定制的评估函数可以在模型编译时传入,该函数应该以(y_true, y_pred)为参数,并返回单个张量,或从metric_name映射到metric_value的字典,下面是一个示例:

(y_true, y_pred) as arguments and return a single tensor value.
import keras.backend as K
def mean_pred(y_true, y_pred):
 return K.mean(y_pred)
 
model.compile(optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['accuracy', mean_pred])

补充知识:Keras.metrics中的accuracy总结

1. 背景

Accuracy(准确率)是机器学习中最简单的一种评价模型好坏的指标,每一个从事机器学习工作的人一定都使用过这个指标。没从事过机器学习的人大都也知道这个指标,比如你去向别人推销一款自己做出来的字符识别软件,人家一定会问你准确率是多少。准确率听起来简单,但不是所有人都能理解得透彻,本文将介绍Keras中accuracy(也适用于Tensorflow)的几个新“玩法”。

2. Keras中的accuracy介绍

Keras.metrics中总共给出了6种accuracy,如下图所示:

Keras官方中文文档:性能评估Metrices详解

接下来将对这些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。以下是几个比较常见的用法:

1) 当你的标签和预测值都是具体的label index(如y_true=[1, 2, 1], y_pred=[0, 1, 1])时,用keras.metrics.accuracy。

2) 当你的标签是具体的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的官方文档。

以上这篇Keras官方中文文档:性能评估Metrices详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
python基础教程之数字处理(math)模块详解
Mar 25 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
解析Python编程中的包结构
Oct 25 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
3个用于数据科学的顶级Python库
Sep 29 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
python 读取、写入txt文件的示例
Sep 27 Python
在keras里面实现计算f1-score的代码
Jun 15 #Python
Python流程控制语句的深入讲解
Jun 15 #Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 #Python
python语言是免费还是收费的?
Jun 15 #Python
DataFrame.groupby()所见的各种用法详解
Jun 14 #Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 #Python
Pandas把dataframe或series转换成list的方法
Jun 14 #Python
You might like
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
TensorFlow实现创建分类器
2018/02/06 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
导游词之岳阳楼
2019/09/25 职场文书
vue 实现上传组件
2021/05/31 Vue.js
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA