问题:一个数据又多个标签,一个样本数据多个类别中的某几类;比如一个病人的数据有多个疾病,一个文本有多种题材,所以标签就是: [1,0,0,0,1,0,1] 这种高维稀疏类型,如何计算分类准确率?

分类问题:

二分类

多分类

多标签

Keras metrics (性能度量)

介绍的比较好的一个博客:

https://machinelearningmastery.com/custom-metrics-deep-learning-keras-python/

还有一个介绍loss的博客:

https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/

metrics:在训练的每个batch结束的时候计算训练集acc,如果提供验证集(一个epoch结束计算验证集acc),也同时计算验证集的性能度量,分为回归任务和分类任务,有不同的acc计算办法;metrics 里面可以放 loss (回归问题)或者acc(分类问题);

A metric is a function that is used to judge the performance of your model.

A metric function is similar to a loss function, except that the results from evaluating a metric are not used when training the model. You may use any of the loss functions as a metric function.

metrics其实和loss类似,只是不用来指导网络的训练;一般根据具体问题具体要求采用不同的 metric 函数,衡量性能;

分类问题的不同acc计算方法:

  • Binary Accuracy: binary_accuracy, acc
  • Categorical Accuracy: categorical_accuracy, acc
  • Sparse Categorical Accuracy: sparse_categorical_accuracy
  • Top k Categorical Accuracy: top_k_categorical_accuracy (requires you specify a k parameter)
  • Sparse Top k Categorical Accuracy: sparse_top_k_categorical_accuracy (requires you specify a k parameter)

keras metrics 默认的accuracy:

metrics["accuracy"] :   == categorical_accuracy; 最快的验证方法,训练一个简单网络,同时输出默认accuracy,categorical_accuracy,,binaray_accuracy, 对比就可以知道;

或者看keras源码,找到metrics默认设置:

多标签分类问题:

[1,0,0,1,0] , [1,0,0,0,0] 分别是 y_pred, y_true:

如果使用 binary_accuracy : acc = 0.8;

if the prediction would be [0, 0, 0, 0, 0, 1]. And if the actual labels were [0, 0, 0, 0, 0, 0], the accuracy would be 5/6.;

训练过程常见坑:

1.自定义loss:

自定义loss写成函数的时候,keras compile() 里面,要调用自定义的loss函数而不是只给函数名:

model.compile(optimizer="adam", loss=self_defined_loss(), metrics=["accuracy"])
 
2. 关于top5 , top1 ACC:--(针对多分类不是多标签问题)
一个图片可能是 [猫,狗,大象,老鼠,小皮球,房子]里面的一种;我们对每个图片输出一个概率分布 [0.3,0.2,0.1,0.1,0.3] , 如果:
top1: 概率最高的预测类别是否和真实标签一致;
top5:概率最高的5个预测类别是否包含了真实标签;
 

keras multi-label classification 多标签分类的更多相关文章

  1. 多标签分类(multi-label classification)综述

    意义 网络新闻往往含有丰富的语义,一篇文章既可以属于“经济”也可以属于“文化”.给网络新闻打多标签可以更好地反应文章的真实意义,方便日后的分类和使用. 难点 (1)类标数量不确定,有些样本可能只有一个 ...

  2. 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]

    前言 很多地方我们都需要用到多标签分类,比如一张图片,上面有只蓝猫,另一张图片上面有一只黄狗,那么我们要识别的时候,就可以采用多标签分类这一思想了.任务一是识别出这个到底是猫还是狗?(类型)任务二是识 ...

  3. multi-label image classification:多标签图像分类总结

    多标签图像分类总结 目录 1.简介 2.现有数据集和评价指标 3.学习算法 4.总结(现在存在的问题,研究发展的方向) 简介 传统监督学习主要是单标签学习,而现实生活中目标样本往往比较复杂,具有多个语 ...

  4. 使用 scikit-learn 实现多类别及多标签分类算法

    多标签分类格式 对于多标签分类问题而言,一个样本可能同时属于多个类别.如一个新闻属于多个话题.这种情况下,因变量yy需要使用一个矩阵表达出来. 而多类别分类指的是y的可能取值大于2,但是y所属类别是唯 ...

  5. scikit-learn一般实例之八:多标签分类

    本例模拟一个多标签文档分类问题.数据集基于下面的处理随机生成: 选取标签的数目:泊松(n~Poisson,n_labels) n次,选取类别C:多项式(c~Multinomial,theta) 选取文 ...

  6. CSS.02 -- 样式表 及标签分类(块、行、行内块元素)、CSS三大特性、背景属性

    样式表书写位置  内嵌式写法 <head> <style type="text/css"> 样式表写法 </style> </head&g ...

  7. 前端 HTML 标签分类

    三种: 1.块级标签: 独占一行,可设置宽度,高度.如果设置了宽度和高度,则就是当前的宽高.如果宽度和高度没有设置,宽度是父盒子的宽度,高度根据内容填充. 2.行内标签:在一行内显示,不能设置宽度,高 ...

  8. k-近邻算法 标签分类

    k-近邻算法根据特征比较,然后提取样本集中特征最相似数据(最邻近)的分类标签.那么,如何进行比较呢? 怎么判断红色圆点标记的电影所属的类别呢? 如下图所示. 答:距离度量.这个电影分类的例子有2个特征 ...

  9. day46——特殊符号、标签分类、标签

    day46 特殊符号  --空格 >大于号 <小于号 ... 找HTML特殊符号 标签分类 块级标签(行外标签):独占一行,可以包含内敛标签和某些块级标签,div,p,h1-h6,hr,f ...

随机推荐

  1. day22_3-json模块

    # 参考资料:# python模块(转自Yuan先生) - 狂奔__蜗牛 - 博客园# https://www.cnblogs.com/guojintao/articles/9070485.html# ...

  2. System Verilog的概念以及与verilog的对比

    以下内容源自:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...

  3. 《DSP using MATLAB》Problem 8.33

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  4. git撤销修改及版本回退

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步, ...

  5. java_缓冲流(文件内容排序)

    /** 案例:诸葛亮出师表文本排序 * 1.使用HashMap集合,k存储每行文本序,v存储文本 * 2.创建字符缓冲输入流,构造方法中绑定字符输入流 * 3.使用字符串缓冲输入流中的方法readLi ...

  6. UMP系统功能 分库分表

  7. Java中Arrys数组常用的方法

    Arrys常用方法 1.toString() Arrays.toString(arr)        //打印数组的内容,观察数组元素的值 2.sort() Arrays.sort(arr);     ...

  8. [转]C# 之泛型详解

    什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为 ...

  9. thinkphp 虚拟模型

    虚拟模型是指虽然是模型类,但并不会真正的操作数据库的模型.有些时候,我们建立模型类但又不需要进行数据库操作,仅仅是借助模型类来封装一些业务逻辑,那么可以借助虚拟模型来完成.虚拟模型不会自动连接数据库, ...

  10. <<十二怒汉>>影评——程序正义,结果正义?

    <>影评--程序正义,结果正义? 这是一部黑白的,场景简单的(全电影的发生地只是一个房间),无趣且不讨喜的电影,但是这同时又是一部伟大的,深邃的,每个人看过之后都会陷入深深思考的电影.好的 ...