欢迎访问宙启技术站
智能推送

权重随机采样(WeightedRandomSampler)在python中的应用

发布时间:2023-12-29 11:05:13

权重随机采样(WeightedRandomSampler)是在样本不均衡的情况下,通过对样本的权重进行采样,来使得采样出的样本更加平衡的一种方法。在python中,可以通过torch.utils.data中的WeightedRandomSampler类来实现权重随机采样。

下面是一个使用权重随机采样的示例代码:

import torch
from torch.utils.data import WeightedRandomSampler

# 假设我们有一个有20个样本的数据集,其中正样本有10个,负样本有10个
# 我们可以定义一个权重列表,表示每个样本的权重
weights = [1.0] * 10 + [2.0] * 10

# 创建一个WeightedRandomSampler对象,传入权重列表和需要采样的样本数量
sampler = WeightedRandomSampler(weights, num_samples=5, replacement=True)

# 创建一个数据集
dataset = torch.arange(20)

# 创建一个数据加载器,传入数据集和采样器
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, sampler=sampler)

# 遍历数据加载器,查看采样结果
for data in dataloader:
    print(data)

在以上示例中,我们首先定义了一个包含10个正样本和10个负样本的数据集。然后,我们通过定义一个权重列表,将正样本的权重设置为1.0,负样本的权重设置为2.0。接下来,我们创建了一个WeightedRandomSampler对象,传入权重列表和需要采样的样本数量,这里我们设置需要采样5个样本,并允许有重复采样(replacement=True)。

然后,我们创建了一个数据集,其中包含从0到19的整数。最后,我们创建了一个数据加载器,传入数据集和采样器。通过遍历数据加载器,我们可以查看采样结果,从而观察到采样出的样本更加均衡。