mindspore.dataset.DistributedSampler
- class mindspore.dataset.DistributedSampler(num_shards, shard_id, shuffle=True, num_samples=None, offset=- 1)[源代码]
- 分布式采样器,将数据集进行分片用于分布式训练。 - 说明 - 不同数据集的混洗模式支持如下: - 混洗模式支持 - 混洗模式 - MindDataset - TFRecordDataset - 其他数据集 - Shuffle.ADAPTIVE- 支持 - 不支持 - 不支持 - Shuffle.GLOBAL- 支持 - 支持 - 支持 - Shuffle.PARTIAL- 支持 - 不支持 - 不支持 - Shuffle.FILES- 支持 - 支持 - 不支持 - Shuffle.INFILE- 支持 - 不支持 - 不支持 - 参数:
- num_shards (int) - 数据集分片数量。 
- shard_id (int) - 当前分片的分片ID,应在[0, num_shards-1]范围内。 
- shuffle (Union[bool, Shuffle], 可选) - 是否混洗采样得到的样本。默认值: - True,采用- mindspore.dataset.Shuffle.GLOBAL混洗样本。如果 shuffle 为- False,则不混洗。 通过传入枚举变量设置数据混洗的模式,枚举变量参考链接- mindspore.dataset.Shuffle:- Shuffle.ADAPTIVE:当数据集样本小于等于1亿时,采用- Shuffle.GLOBAL,当大于1亿时,采用局部- Shuffle.PARTIAL,每100万样本混洗一次。
- Shuffle.GLOBAL:执行全局混洗,一次性混洗数据集中所有样本。
- Shuffle.PARTIAL:执行局部混洗,每100万个样本混洗一次。
- Shuffle.FILES:仅混洗文件序列,不混洗文件中的数据。
- Shuffle.INFILE:保持读入文件的序列,仅混洗每个文件中的数据。
 
- num_samples (int, 可选) - 获取的样本数,可用于获取部分采样得到的样本。默认值: - None,获取采样到的所有样本。
- offset (int, 可选) - 分布式采样结果进行分配时的起始分片ID号,值不能大于参数 num_shards 。从不同的分片ID开始分配数据可能会影响每个分片的最终样本数。仅当ConcatDataset以 - mindspore.dataset.DistributedSampler为采样器时,此参数才有效。默认值:- -1,每个分片具有相同的样本数。
 
- 异常:
- TypeError - num_shards 的类型不是int。 
- TypeError - shard_id 的类型不是int。 
- TypeError - shuffle 的类型不是bool 或者 Shuffle。 
- TypeError - num_samples 的类型不是int。 
- TypeError - offset 的类型不是int。 
- ValueError - num_samples 为负值。 
- RuntimeError - num_shards 不是正值。 
- RuntimeError - shard_id 小于0或大于等于 num_shards 。 
- RuntimeError - offset 大于 num_shards 。 
 
 - 样例: - >>> import mindspore.dataset as ds >>> # creates a distributed sampler with 10 shards in total. This shard is shard 5. >>> sampler = ds.DistributedSampler(10, 5) >>> dataset = ds.ImageFolderDataset(image_folder_dataset_dir, ... num_parallel_workers=8, ... sampler=sampler) - add_child(sampler)[源代码]
- 为给定采样器添加子采样器。父采样器接收子采样器输出数据作为输入,并应用其采样逻辑返回新的采样结果。 - 说明 - 被添加的子sampler如果有 shuffle 属性,其值不能是 - Shuffle.PARTIAL,且父sampler的 shuffle 属性值必须是- Shuffle.GLOBAL。- 参数:
- sampler (Sampler) - 用于从数据集中选择样本的对象。仅支持内置采样器( - mindspore.dataset.DistributedSampler、- mindspore.dataset.PKSampler、- mindspore.dataset.RandomSampler、- mindspore.dataset.SequentialSampler、- mindspore.dataset.SubsetRandomSampler、- mindspore.dataset.WeightedRandomSampler)。
 
 - 样例: - >>> import mindspore.dataset as ds >>> 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,给定采样器的子采样器。 
 - 样例: - >>> import mindspore.dataset as ds >>> 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。 
 - 样例: - >>> import mindspore.dataset as ds >>> sampler = ds.SequentialSampler(start_index=0, num_samples=3) >>> num_samplers = sampler.get_num_samples()