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之不要红头文件(2)
Sep 28 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python找出最小的K个数实例代码
Jan 04 Python
Python3简单实现串口通信的方法
Jun 12 Python
深入了解Python在HDA中的应用
Sep 05 Python
Python tkinter和exe打包的方法
Feb 05 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
你需要学会的8个Python列表技巧
Jun 24 Python
分享Python异步爬取知乎热榜
Apr 12 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
phpStorm2020 注册码
2020/09/17 PHP
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
iframe实用操作锦集
2014/04/22 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
解析Vue 2.5的Diff算法
2017/11/28 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
学习node.js 断言的使用详解
2019/03/18 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
Java中实现多态的机制是什么?
2014/12/07 面试题
2014年师德师风自我剖析材料
2014/09/27 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
专家推荐信怎么写
2015/03/25 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis