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 相关文章推荐
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python变量和数据类型详解
Feb 15 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
python实现kmp算法的实例代码
Apr 03 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
python Scrapy框架原理解析
Jan 04 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
13个PHP函数超实用
2015/10/21 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
vue实现放大镜效果
2020/09/17 Javascript
Python中subprocess的简单使用示例
2015/07/28 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
安全检查管理制度
2014/02/02 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
党员查摆剖析材料
2014/10/10 职场文书
中班上学期个人总结
2015/02/12 职场文书
政审证明范文
2015/06/19 职场文书
导游词之桂林山水
2019/09/20 职场文书
详解Redis瘦身指南
2021/05/26 Redis
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏