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

 更新时间:2019年12月31日 09:09:22   作者:NAAE  
今天小编就为大家分享一篇关于pytorch处理类别不平衡的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

当训练样本不均匀时,我们可以采用过采样、欠采样、数据增强等手段来避免过拟合。今天遇到一个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实现PDF动画翻页效果的阅读器

    基于Python实现PDF动画翻页效果的阅读器

    在这篇博客中,我们将深入分析一个基于 wxPython 实现的 PDF 阅读器程序,该程序支持加载 PDF 文件并显示页面内容,同时支持页面切换动画效果,文中有详细的代码示例,需要的朋友可以参考下
    2025-01-01
  • Python中BeautifuSoup库的用法使用详解

    Python中BeautifuSoup库的用法使用详解

    这篇文章主要介绍了Python中BeautifuSoup库的用法使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python轻松实现2位小数随机生成

    Python轻松实现2位小数随机生成

    在Python中,我们经常需要生成随机数,特别是2位小数的随机数,这在模拟实验、密码学、游戏开发等领域都很有用,下面是如何在Python中生成2位小数的随机数的代码示例,需要的朋友可以参考下
    2023-11-11
  • Python3.5 处理文本txt,删除不需要的行方法

    Python3.5 处理文本txt,删除不需要的行方法

    今天小编就为大家分享一篇Python3.5 处理文本txt,删除不需要的行方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • windows下安装python paramiko模块的代码

    windows下安装python paramiko模块的代码

    windows下安装python paramiko模块,有需要的朋友可以参考下
    2013-02-02
  • 详解matplotlib中pyplot和面向对象两种绘图模式之间的关系

    详解matplotlib中pyplot和面向对象两种绘图模式之间的关系

    这篇文章主要介绍了详解matplotlib中pyplot和面向对象两种绘图模式之间的关系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 利用Python实现定时程序的方法

    利用Python实现定时程序的方法

    在 Python 中,如何定义一个定时器函数呢?本文主要介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • python异步编程 使用yield from过程解析

    python异步编程 使用yield from过程解析

    这篇文章主要介绍了python异步编程 使用yield from过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Boston数据集预测放假及应用优缺点评估

    Boston数据集预测放假及应用优缺点评估

    这篇文章主要为大家介绍了Boston数据集预测放假及应用优缺点评估,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Python常用的爬虫技巧总结

    Python常用的爬虫技巧总结

    本文给大家汇总介绍了Python编写爬虫的时候经常需要用到的一些技巧,非常的实用,有需要的小伙伴可以参考下
    2016-03-03

最新评论