pytorch sampler对数据进行采样的实现


Posted in Python onDecember 31, 2019

PyTorch中还单独提供了一个sampler模块,用来对数据进行采样。常用的有随机采样器:RandomSampler,当dataloader的shuffle参数为True时,系统会自动调用这个采样器,实现打乱数据。默认的是采用SequentialSampler,它会按顺序一个一个进行采样。这里介绍另外一个很有用的采样方法: WeightedRandomSampler,它会根据每个样本的权重选取数据,在样本比例不均衡的问题中,可用它来进行重采样。

构建WeightedRandomSampler时需提供两个参数:每个样本的权重weights、共选取的样本总数num_samples,以及一个可选参数replacement。权重越大的样本被选中的概率越大,待选取的样本数目一般小于全部的样本数目。replacement用于指定是否可以重复选取某一个样本,默认为True,即允许在一个epoch中重复采样某一个数据。如果设为False,则当某一类的样本被全部选取完,但其样本数目仍未达到num_samples时,sampler将不会再从该类中选择数据,此时可能导致weights参数失效。

下面举例说明。

from dataSet import *
dataset = DogCat('data/dogcat/', transform=transform)

from torch.utils.data import DataLoader
# 狗的图片被取出的概率是猫的概率的两倍
# 两类图片被取出的概率与weights的绝对大小无关,只和比值有关
weights = [2 if label == 1 else 1 for data, label in dataset]

print(weights)

from torch.utils.data.sampler import WeightedRandomSampler
sampler = WeightedRandomSampler(weights,\
                num_samples=9,\
                replacement=True)
dataloader = DataLoader(dataset,
            batch_size=3,
            sampler=sampler)
for datas, labels in dataloader:
  print(labels.tolist())

输出:

[2, 2, 1, 1, 2, 1, 1, 2]
[1, 1, 0]
[1, 0, 0]
[0, 0, 1]

github 地址:

https://github.com/WebLearning17/CommonTool

以上这篇pytorch sampler对数据进行采样的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 实时遍历日志文件
Apr 12 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
python中的函数递归和迭代原理解析
Nov 14 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python 等差数列末项计算方式
May 03 Python
关于pytorch处理类别不平衡的问题
Dec 31 #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
You might like
php 301转向实现代码
2008/09/18 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
python给list排序的简单方法
2020/12/10 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
幼儿园户外活动总结
2014/07/04 职场文书
北京英文导游词
2015/02/12 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
公司借条范本
2015/05/25 职场文书
我的1919观后感
2015/06/03 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
如何正确理解python装饰器
2021/06/15 Python
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android
Redis主从复制操作和配置详情
2022/09/23 Redis