keras中模型训练class_weight,sample_weight区别说明


Posted in Python onMay 23, 2020

keras 中fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0,

validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0,

steps_per_epoch=None, validation_steps=None)

官方文档中:

class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)。该参数在处理非平衡的训练数据(某些类的训练样本数很少)时,可以使得损失函数对样本数不足的数据更加关注。

sample_weight:权值的numpy array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode='temporal'。

class_weight---主要针对的上数据不均衡问题,比如:异常检测的二项分类问题,异常数据仅占1%,正常数据占99%; 此时就要设置不同类对loss的影响。

sample_weigh---主要解决的是样本质量不同的问题,比如前1000个样本的可信度,那么它的权重就要高,后1000个样本可能有错、不可信,那么权重就要调低。

补充知识:Keras 中数据不均衡时,metrics,class_weight的设置方法

当数据处理不均衡时,比如处理癌症训练问题,有病样本很少,参考:

http://www.deepideas.net/unbalanced-classes-machine-learning/

主要从两个方面着手:

一、loss函数的权重问题

训练时,设置的权重:

class_weight={
  1: n_non_cancer_samples / n_cancer_samples * t
}

二、编译时设置模型的metrics

def sensitivity(y_true, y_pred):
  true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
  possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
  return true_positives / (possible_positives + K.epsilon())

def specificity(y_true, y_pred):
  true_negatives = K.sum(K.round(K.clip((1-y_true) * (1-y_pred), 0, 1)))
  possible_negatives = K.sum(K.round(K.clip(1-y_true, 0, 1)))
  return true_negatives / (possible_negatives + K.epsilon())
model.compile(
  loss='binary_crossentropy',
  optimizer=RMSprop(0.001),
  metrics=[sensitivity, specificity]
)

以上这篇keras中模型训练class_weight,sample_weight区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
Python3计算三角形的面积代码
Dec 18 Python
python实现朴素贝叶斯分类器
Mar 28 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
pandas series序列转化为星期几的实例
Apr 11 Python
pandas 如何分割字符的实现方法
Jul 29 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
快速创建python 虚拟环境
Nov 28 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
详解Python中的for循环
Apr 30 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 #Python
Keras实现将两个模型连接到一起
May 23 #Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 #Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 #Python
keras小技巧——获取某一个网络层的输出方式
May 23 #Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 #Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 #Python
You might like
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python中的上下文管理器和with语句的使用
2018/04/17 Python
Python对切片命名的实现方法
2018/10/16 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
自考毕业生自我鉴定
2013/11/04 职场文书
挂牌仪式主持词
2014/03/20 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014年人大工作总结
2014/12/10 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书