samples

更新时间:2023-01-04 07:52:36 阅读:11 评论:0


2023年1月4日发(作者:all about us)

pythonsample函数取样,pythonsample函数取样_Pytorch各种

取样。。。

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

⼀:概念

Sample:

取样器是在某⼀个数据集合上,按照某种策略进⾏取样。常见的策略包括顺序取样,随机取样(个样本等概率),随机取样(赋予个样本不同的

概率)。以上三个策略都有放回和不放回两种⽅式。

TensorDatat:

对多个数据列表进⾏简单包装。就是⽤⼀个更⼤的list将多个不同类型的list数据进⾏简单包装。代码如下:

classTensorDatat(Datat):

r"""Datatwrappingtensors.

Eachsamplewillberetrievedbyindexingtensorsalongthefirstdimension.

Arguments:

*tensors(Tensor):tensorsthathavethesamesizeofthefirstdimension.

"""

def__init__(lf,*tensors):

asrtall(tensors[0].size(0)==(0)fortensorintensors)

s=tensors

def__getitem__(lf,index):

returntuple(tensor[index]s)

def__len__(lf):

s[0].size(0)

⼆参数

tialSampler()

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

Sampler()

data_source(Datat)–datattosamplefrom

replacement(bool)–samplesaredrawnwithreplacementifTrue,default=``Fal``放回/不放回采样

num_samples(python:int)–numberofsamplestodraw,default=`len(datat)`.Thisargumentissuppodtobespecified

onlywhenreplacementisTrue.采样的次数,采集⼏次即迭代器中有⼏个样本。

⼏个测试例⼦:

data1=(list(range(20,50)),dtype=)

sample1=RandomSampler(data1,replacement=Fal)

fori,dinenumerate(sample1):

print(i,d)

运⾏结果:

027

125

28

320

428

512

626

718

813

921

109

1122

1217

136

140

157

1614

1724

1810

1919

202

2129

2216

235

243

2511

261

274

2815

2923

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

edRandomSampler

weights(quence)–aquenceofweights,notnecessarysumminguptoone赋予每个样本权重。代表取到该样例的概率。数

据不均衡时可以⽤来控制不同类别样本的采样权重

num_samples(python:int)–numberofsamplestodraw

replacement(bool)–ifTrue,,theyaredrawnwithoutreplacement,whichmeans

thatwhenasampleindexisdrawnforarow,itcannotbedrawnagainforthatrow.

三使⽤⽅式

1.返回值。

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

看上⾯的例⼦,datat是数值为30-50的列表。⽽遍历sample时,返回的是0-30的数值,代表采样样例的索引

2.取样器。

每次执⾏遍历取样器,取样器就会按照设定的⽅式进⾏⼀次取样。

data=(list(range(20)),dtype=)

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

for_inrange(5):

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

fori,dinenumerate(sample):

print(i,d)

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

实际结果:

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

018

19

214

317

415

57

63

716

811

910

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

016

19

218

38

44

519

617

711

815

910

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

016

15

217

315

410

513

611

718

814

98

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

017

118

216

313

43

511

619

714

812

99

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

05

116

219

39

410

57

611

712

813

94

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

3.与DataLoader⼀起使⽤

data=(list(range(20)),dtype=)

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

daloloader=ader(data,batch_size=2,sampler=sample)

fori,dinenumerate(daloloader):

print(i,d)

结果:

0tensor([9,6])

1tensor([18,16])

2tensor([7,15])

3tensor([13,12])

4tensor([5,11])

这⾥执⾏的流程是。

⾸先sample在数据集datat上进⾏取样。dataloader按batch_size的⼤⼩每次读取批量的数据(采样后的数据)。

例如:数据集合⼀共有20个样例,⾸先⽤取样器取出10个样例。Dataloader会在取样后的数据每次读取批量的样例。如果batch_size是

2。那么dataloader的len是5。

本文发布于:2023-01-04 07:52:36,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/89562.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:爆破音
下一篇:shenme
标签:samples
相关文章
留言与评论(共有 0 条评论)
昵称:
匿名发表 登录账号
         
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图