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 29 Python
python实现挑选出来100以内的质数
Mar 24 Python
Python函数式编程指南(二):从函数开始
Jun 24 Python
Python中Django 后台自定义表单控件
Mar 28 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
python模拟表单提交登录图书馆
Apr 27 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Python 去除字符串中指定字符串
Mar 05 Python
python中加背景音乐如何操作
Jul 19 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
浅谈Python类的单继承相关知识
May 12 Python
python scrapy简单模拟登录的代码分析
Jul 21 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中inlcude()性能对比详解
2012/09/16 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
理解javascript闭包
2015/12/15 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
详解C++编程中一元运算符的重载
2016/01/19 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
简单实现python数独游戏
2018/03/30 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
python爬虫实现中英翻译词典
2019/06/25 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
python带参数打包exe及调用方式
2019/12/21 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Django实现内容缓存实例方法
2020/06/30 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
机电专业个人求职信范文
2013/12/30 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
教师自我剖析材料
2014/09/29 职场文书
总经理助理岗位职责
2015/01/31 职场文书
社区义诊通知
2015/04/24 职场文书