测试了pytorch的三种取样器用法。

一:概念

Sample:

取样器是在某一个数据集合上,按照某种策略进行取样。常见的策略包括顺序取样,随机取样(个样本等概率),随机取样(赋予个样本不同的概率)。以上三个策略都有放回和不放回两种方式。

TensorDataset:

对多个数据列表进行简单包装。就是用一个更大的list将多个不同类型的list数据进行简单包装。代码如下:

class TensorDataset(Dataset):

r"""Dataset wrapping tensors.

Each sample will be retrieved by indexing tensors along the first dimension.

Arguments:

*tensors (Tensor): tensors that have the same size of the first dimension.

"""

def __init__(self, *tensors):

assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors)

self.tensors = tensors

def __getitem__(self, index):

return tuple(tensor[index] for tensor in self.tensors)

def __len__(self):

return self.tensors[0].size(0)

二参数

1.SequentialSampler()

顺序采样,只有一个参数dataset。返回以一个与数据集等长的迭代器。

2.RandomSampler()

data_source (Dataset) – dataset to sample from

replacement (bool) – samples are drawn with replacement if True, default=``False`` 放回/不放回采样

num_samples (python:int) – number of samples to draw, default=`len(dataset)`. This argument is supposed to be specified only when replacement is True. 采样的次数,采集几次即迭代器中有几个样本。

几个测试例子:

data1 = torch.tensor(list(range(20,50)),dtype=torch.long)

sample1 = RandomSampler(data1,replacement=False)

for i,d in enumerate(sample1):

print(i,d)

运行结果:

0 27

1 25

2 8

3 20

4 28

5 12

6 26

7 18

8 13

9 21

10 9

11 22

12 17

13 6

14 0

15 7

16 14

17 24

18 10

19 19

20 2

21 29

22 16

23 5

24 3

25 11

26 1

27 4

28 15

29 23

如果采样不放回的采样,不能指定num_samples。也就是num_samples必须等于默认值len(dataset)。随机不放回的取完集合。

3. WeightedRandomSampler

weights (sequence) – a sequence of weights, not necessary summing up to one赋予每个样本权重。代表取到该样例的概率。数据不均衡时可以用来控制不同类别样本的采样权重

num_samples (python:int) – number of samples to draw

replacement (bool) – if True, samples are drawn with replacement. If not, they are drawn without replacement, which means that when a sample index is drawn for a row, it cannot be drawn again for that row.

三 使用方式

1.返回值。

注意以上每个取样器返回的都是样本在dataset中的索引,并不是样本本身。

看上面的例子,dataset是数值为30-50的列表。而遍历sample时,返回的是0-30的数值,代表采样样例的索引

2.取样器。

每次执行遍历取样器,取样器就会按照设定的方式进行一次取样。

data = torch.tensor(list(range(20)),dtype=torch.long)

sample = WeightedRandomSampler(list(range(20)),num_samples=10,replacement=False)

for _ in range(5):

print("******************************************")

for i,d in enumerate(sample):

print(i,d)

误解:samle是取样一次后存的结果,是一个值固定的迭代器。每次遍历的值一样。

实际结果:

******************************************

0 18

1 9

2 14

3 17

4 15

5 7

6 3

7 16

8 11

9 10

******************************************

0 16

1 9

2 18

3 8

4 4

5 19

6 17

7 11

8 15

9 10

******************************************

0 16

1 5

2 17

3 15

4 10

5 13

6 11

7 18

8 14

9 8

******************************************

0 17

1 18

2 16

3 13

4 3

5 11

6 19

7 14

8 12

9 9

******************************************

0 5

1 16

2 19

3 9

4 10

5 7

6 11

7 12

8 13

9 4

多次遍历sample,每次的值各不相同。也就是说每一次遍历都进行了一次取样。

3.与DataLoader一起使用

data = torch.tensor(list(range(20)),dtype=torch.long)

sample = WeightedRandomSampler(list(range(20)),num_samples=10,replacement=False)

daloloader = torch.utils.data.DataLoader(data,batch_size=2,sampler=sample)

for i,d in enumerate(daloloader):

print(i,d)

结果:

0 tensor([9, 6])

1 tensor([18, 16])

2 tensor([ 7, 15])

3 tensor([13, 12])

4 tensor([ 5, 11])

这里执行的流程是。

首先sample在数据集dataset上进行取样。dataloader按batch_size的大小每次读取批量的数据(采样后的数据)。

例如:数据集合一共有20个样例,首先用取样器取出10个样例。Dataloader会在取样后的数据每次读取批量的样例。如果batch_size是2。那么dataloader的len是5。

原文链接:https://blog.csdn.net/MrR1ght/article/details/105203118

python sample函数取样,python sample函数取样_Pytorch各种取样器sample相关推荐

  1. python sample函数取样_Pytorch各种取样器sample

    测试了pytorch的三种取样器用法. 一:概念 Sample: 取样器是在某一个数据集合上,按照某种策略进行取样.常见的策略包括顺序取样,随机取样(个样本等概率),随机取样(赋予个样本不同的概率). ...

  2. [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数

    python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...

  3. python random函数原理_Python random() 函数

    描述 random() 方法返回随机生成的一个实数,它在[0,1)范围内. 语法 以下是 random() 方法的语法: import random random.random() 注意:random ...

  4. python randint函数详解_python函数深入浅出 17.random.randint()函数详解

    1.函数名及其来源 random() 函数命名来源于英文单词random(随机). randint是random + integer拼接简写而成,代表随机一个整数 Python标准库中的random函 ...

  5. 《流畅的Python第二版》读书笔记——函数中的类型注解

    引言 这是<流畅的Python第二版>抢先版的读书笔记.Python版本暂时用的是python3.10.为了使开发更简单.快捷,本文使用了JupyterLab. 本章关注于Python在函 ...

  6. python内置方法就是内置函数_python内置函数

    什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...

  7. python基础---元组、字典、函数、文件、异常

    文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...

  8. python中的正则替换字符串函数re.sub

    python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串 然后把它替换成自己想要的字符串的方法 re.sub 函数进行以正则表达式为基础的替换工作 下面是一段示例 ...

  9. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  10. Python培训教程:Python有哪些比较重要的内置函数?

    学习Python技术或者参加Python工作的小伙伴们应该都知道,在Python编程语言中会经常出现很多内置函数,很少有人清楚这些函数,但是它的功能是不可小觑的,下面小编就为大家详细介绍一下Pytho ...

最新文章

  1. 移动互联网的机会-从零创业,半年净赚50万?
  2. pip:成功解决pip下载时速度超慢(pip下载慢)的几种方法
  3. Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热
  4. SSAS-MDX#001 - MDX 基本结构
  5. mysql pmm 布署_给 mysql 安装 pmm 监控
  6. mysql中的删除语法错误_mysql – EXPLAIN中的SQL语法错误
  7. JAVA程序错误总结
  8. matlab非牛顿流体,可用于常见非牛顿流体的数值模拟方法与流程
  9. 基于Otsu算法的图像分割
  10. python实现em聚类算法_EM算法的python实现的方法步骤
  11. 用知识图谱解读抑郁症——树洞
  12. java:定义一个Shape类,派生出Circle类和Rectangle类,手写模拟GeoArrayList,实现升序(升序以面积大小判断)存入Circle类和Rectangle类
  13. 苹果8p手机的指纹解锁为什么会失灵呢?怎么解决
  14. 【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考
  15. android canvas 工作流_Activiti工作流引擎使用
  16. 数据结构的逻辑结构及物理结构
  17. 美国访问学者生活需要注意的七大事项
  18. 【历史上的今天】5 月 24 日:“千禧年七大难题”公布;第一台小型计算机开始研发;首台家用游戏机诞生
  19. 服务器瘫痪怎么办微信,如果微信突然瘫痪了,这个世界会怎么样?你会怎么办?...
  20. 近几年好的需求管理工具有哪些?不错的需求管理工具推荐!

热门文章

  1. 揭秘淘宝平台广告策略,拆解最佳投放实践
  2. RecyclerView自定义分割线实战
  3. amp;#9733;用辩证数学解答“缸中之脑”
  4. cur前缀_常用词根前缀
  5. String类题目methods总结
  6. vue2支付宝网页授权登录
  7. bind搭建智能DNS
  8. 计算机游戏动漫制作自我鉴定,关于游戏实习的自我鉴定
  9. 基于51单片机GSM模块的家庭防火防盗报警系统
  10. Android之权限(permission)大全