mindspore.dataset.PKSampler

class mindspore.dataset.PKSampler(num_val, num_class=None, shuffle=False, class_column='label', num_samples=None)[源代码]

为数据集中每P个类别各采样K个样本。

参数:
  • num_val (int) - 每个类要采样的元素数量。

  • num_class (int, 可选) - 要采样的类数量,默认值:为None,采样所有类。当前不支持指定该参数。

  • shuffle (bool, 可选) - 是否混洗采样得到的样本,默认值:False,不混洗样本。

  • class_column (str, 可选) - 指定label所属数据列的名称,将基于此列作为数据标签进行采样,默认值:’label’。

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

异常:
  • TypeError - shuffle 的类型不是bool。

  • TypeError - class_column 的类型不是str。

  • TypeError - num_samples 的类型不是int。

  • NotImplementedError - num_class 不为None。

  • RuntimeError - num_val 不是正值。

  • ValueError - num_samples 为负值。

样例:

>>> # creates a PKSampler that will get 3 samples from every class.
>>> sampler = ds.PKSampler(3)
>>> 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()

获取当前采样器实例的num_samples参数值。此参数在定义Sampler时,可以选择性传入(默认为None)。此方法将返回num_samples的值,如果当前采样器有子采样器,会继续访问子采样器,并根据一定的规则处理获取值。

下表显示了各种可能的组合,以及最终返回的结果。

子采样器

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()