PyTorch中还单独提供了一个取样器模块,用来对数据进行采样。常用的有随机采样器:RandomSampler,当dataloader的洗牌参数为真时,系统会自动调用这个采样器,实现打乱数据。默认的是采用SequentialSampler,它会按顺序一个一个进行采样。这里介绍另外一个很有用的采样方法:WeightedRandomSampler,它会根据每个样本的权重选取数据,在样本比例不均衡的问题中,可用它来进行重采样。
构建WeightedRandomSampler时需提供两个参数:每个样本的权重重量、共选取的样本总数num_samples,以及一个可选参数替换。权重越大的样本被选中的概率越大,待选取的样本数目一般小于全部的样本数目.replacement用于指定是否可以重复选取某一个样本,默认为真,即允许在一个时代中重复采样某一个数据。如果设为False,则当某一类的样本被全部选取完,但其样本数目仍未达到num_samples时,取样器将不会再从该类中选择数据,此时可能导致权重参数失效。
<强>下面举例说明。强>
从数据集进口* 数据集=DogCat(数据/DogCat/,变换=变换) 从torch.utils。数据导入DataLoader #狗的图片被取出的概率是猫的概率的两倍 #两类图片被取出的概率与权重的绝对大小无关,只和比值有关 重量=[2如果其他标签==1 1数据,标签数据集) 打印(权重) 从torch.utils.data。取样器进口WeightedRandomSampler 取样器=WeightedRandomSampler(重量、\ num_samples=9, \ 替代=True) dataloader=dataloader(数据集, batch_size=3, 取样器取样器) 数据,在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采样器对数据进行采样的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。