关于pytorch处理类别不平衡的问题


Posted in Python onDecember 31, 2019

当训练样本不均匀时,我们可以采用过采样、欠采样、数据增强等手段来避免过拟合。今天遇到一个3d点云数据集合,样本分布极不均匀,正例与负例相差4-5个数量级。数据增强效果就不会太好了,另外过采样也不太合适,因为是空间数据,新增的点有可能会对真实分布产生未知影响。所以采用欠采样来缓解类别不平衡的问题。

下面的代码展示了如何使用WeightedRandomSampler来完成抽样。

numDataPoints = 1000
data_dim = 5
bs = 100

# Create dummy data with class imbalance 9 to 1
data = torch.FloatTensor(numDataPoints, data_dim)
target = np.hstack((np.zeros(int(numDataPoints * 0.9), dtype=np.int32),
     np.ones(int(numDataPoints * 0.1), dtype=np.int32)))

print 'target train 0/1: {}/{}'.format(
 len(np.where(target == 0)[0]), len(np.where(target == 1)[0]))

class_sample_count = np.array(
 [len(np.where(target == t)[0]) for t in np.unique(target)])
weight = 1. / class_sample_count
samples_weight = np.array([weight[t] for t in target])

samples_weight = torch.from_numpy(samples_weight)
samples_weight = samples_weight.double()
sampler = WeightedRandomSampler(samples_weight, len(samples_weight))

target = torch.from_numpy(target).long()
train_dataset = torch.utils.data.TensorDataset(data, target)

train_loader = DataLoader(
 train_dataset, batch_size=bs, num_workers=1, sampler=sampler)

for i, (data, target) in enumerate(train_loader):
 print "batch index {}, 0/1: {}/{}".format(
  i,
  len(np.where(target.numpy() == 0)[0]),
  len(np.where(target.numpy() == 1)[0]))

核心部分为实际使用时替换下变量把sampler传递给DataLoader即可,注意使用了sampler就不能使用shuffle,另外需要指定采样点个数:

class_sample_count = np.array(
 [len(np.where(target == t)[0]) for t in np.unique(target)])
weight = 1. / class_sample_count
samples_weight = np.array([weight[t] for t in target])

samples_weight = torch.from_numpy(samples_weight)
samples_weight = samples_weight.double()
sampler = WeightedRandomSampler(samples_weight, len(samples_weight))

参考:https://discuss.pytorch.org/t/how-to-handle-imbalanced-classes/11264/2

以上这篇关于pytorch处理类别不平衡的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
python中map()函数的使用方法示例
Sep 29 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python绘制规则网络图形实例
Dec 09 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
如何基于python实现不邻接植花
May 01 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 #Python
浅析Django中关于session的使用
Dec 30 #Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 #Python
在Python中利用pickle保存变量的实例
Dec 30 #Python
python Popen 获取输出,等待运行完成示例
Dec 30 #Python
Python3常见函数range()用法详解
Dec 30 #Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 #Python
You might like
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
List Installed Hot Fixes
2007/06/12 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python深入学习之闭包
2014/08/31 Python
Python中有趣在__call__函数
2015/06/21 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
试用期转正鉴定评语
2014/01/27 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
致青春观后感
2015/06/09 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
python中if和elif的区别介绍
2021/11/07 Python