python sample函数取样,python sample函数取样_Pytorch各种取样器sample
测试了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相关推荐
- python sample函数取样_Pytorch各种取样器sample
测试了pytorch的三种取样器用法. 一:概念 Sample: 取样器是在某一个数据集合上,按照某种策略进行取样.常见的策略包括顺序取样,随机取样(个样本等概率),随机取样(赋予个样本不同的概率). ...
- [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数
python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...
- python random函数原理_Python random() 函数
描述 random() 方法返回随机生成的一个实数,它在[0,1)范围内. 语法 以下是 random() 方法的语法: import random random.random() 注意:random ...
- python randint函数详解_python函数深入浅出 17.random.randint()函数详解
1.函数名及其来源 random() 函数命名来源于英文单词random(随机). randint是random + integer拼接简写而成,代表随机一个整数 Python标准库中的random函 ...
- 《流畅的Python第二版》读书笔记——函数中的类型注解
引言 这是<流畅的Python第二版>抢先版的读书笔记.Python版本暂时用的是python3.10.为了使开发更简单.快捷,本文使用了JupyterLab. 本章关注于Python在函 ...
- python内置方法就是内置函数_python内置函数
什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...
- python基础---元组、字典、函数、文件、异常
文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...
- python中的正则替换字符串函数re.sub
python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串 然后把它替换成自己想要的字符串的方法 re.sub 函数进行以正则表达式为基础的替换工作 下面是一段示例 ...
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- Python培训教程:Python有哪些比较重要的内置函数?
学习Python技术或者参加Python工作的小伙伴们应该都知道,在Python编程语言中会经常出现很多内置函数,很少有人清楚这些函数,但是它的功能是不可小觑的,下面小编就为大家详细介绍一下Pytho ...
最新文章
- 移动互联网的机会-从零创业,半年净赚50万?
- pip:成功解决pip下载时速度超慢(pip下载慢)的几种方法
- Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热
- SSAS-MDX#001 - MDX 基本结构
- mysql pmm 布署_给 mysql 安装 pmm 监控
- mysql中的删除语法错误_mysql – EXPLAIN中的SQL语法错误
- JAVA程序错误总结
- matlab非牛顿流体,可用于常见非牛顿流体的数值模拟方法与流程
- 基于Otsu算法的图像分割
- python实现em聚类算法_EM算法的python实现的方法步骤
- 用知识图谱解读抑郁症——树洞
- java:定义一个Shape类,派生出Circle类和Rectangle类,手写模拟GeoArrayList,实现升序(升序以面积大小判断)存入Circle类和Rectangle类
- 苹果8p手机的指纹解锁为什么会失灵呢?怎么解决
- 【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考
- android canvas 工作流_Activiti工作流引擎使用
- 数据结构的逻辑结构及物理结构
- 美国访问学者生活需要注意的七大事项
- 【历史上的今天】5 月 24 日:“千禧年七大难题”公布;第一台小型计算机开始研发;首台家用游戏机诞生
- 服务器瘫痪怎么办微信,如果微信突然瘫痪了,这个世界会怎么样?你会怎么办?...
- 近几年好的需求管理工具有哪些?不错的需求管理工具推荐!