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中的算数运算符的用法
May 13 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python占位符输入方式实例
May 27 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python做反被爬保护的方法
Jul 01 Python
python 实现多维数组(array)排序
Feb 28 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 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
解析php类的注册与自动加载
2013/07/05 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
理解JavaScript原型链
2016/10/25 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python批量处理文件或文件夹
2020/07/28 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
EJB3.1都有哪些改进
2012/11/17 面试题
搞笑的获奖感言
2014/08/16 职场文书
借款协议书
2014/09/16 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android