mindspore.dataset.WeightedRandomSampler

class mindspore.dataset.WeightedRandomSampler(weights, num_samples=None, replacement=True)[源代码]

给定样本的权重列表,根据权重决定样本的采样概率,随机采样[0,len(weights) - 1]中的样本。

参数:

  • weights (list[float, int]) - 权重序列,总和不一定为1。

  • num_samples (int, 可选) - 获取的样本数,可用于部分获取采样得到的样本。默认值:None,获取采样到的所有样本。

  • replacement (bool) - 是否将样本ID放回下一次采样,默认值:True,有放回采样。

异常:

  • TypeError weights 元素的类型不是数值类型。

  • TypeError num_samples 的类型不是int。

  • TypeError replacement 的类型不是bool。

  • RuntimeError weights 为空或全为零。

  • ValueError num_samples 为负值。

样例:

>>> weights = [0.9, 0.01, 0.4, 0.8, 0.1, 0.1, 0.3]
>>>
>>> # creates a WeightedRandomSampler that will sample 4 elements without replacement
>>> sampler = ds.WeightedRandomSampler(weights, 4)
>>> dataset = ds.ImageFolderDataset(image_folder_dataset_dir,
...                                 num_parallel_workers=8,
...                                 sampler=sampler)
add_child(sampler)

为给定采样器添加子采样器。子采样器接收父采样器输出数据作为输入,并应用其采样逻辑返回新的采样结果。

参数:

  • sampler (Sampler) - 用于从数据集中选择样本的对象。仅支持内置采样器(DistributedSampler、PKSampler、RandomSampler、SequentialSampler、SubsetRandomSampler、WeightedRandomSampler)。

样例:

>>> sampler = ds.SequentialSampler(start_index=0, num_samples=3)
>>> sampler.add_child(ds.RandomSampler(num_samples=4))
>>> dataset = ds.Cifar10Dataset(cifar10_dataset_dir, sampler=sampler)
get_child()

获取给定采样器的子采样器。

返回:

Sampler,给定采样器的子采样器。

样例:

>>> sampler = ds.SequentialSampler(start_index=0, num_samples=3)
>>> sampler.add_child(ds.RandomSampler(num_samples=2))
>>> child_sampler = sampler.get_child()
get_num_samples()

返回采样器采集样本数量,如果存在子采样器,则子采样器计数可以是数值或None。这些条件会影响最终的采样结果。

下表显示了调用此函数的可能结果。

子采样器

num_samples

child_samples

结果

T

x

y

min(x, y)

T

x

None

x

T

None

y

y

T

None

None

None

None

x

n/a

x

None

None

n/a

None

返回:

int,样本数,可为None。

样例:

>>> sampler = ds.SequentialSampler(start_index=0, num_samples=3)
>>> num_samplers = sampler.get_num_samples()