映射式 DataPipes¶
映射式 DataPipe 是一种实现了 __getitem__() 和 __len__() 协议的 DataPipe,它表示从(可能是非整型的)索引/键到数据样本的映射。这与 PyTorch 核心库中的 Dataset 非常相似。
例如,当使用 mapdatapipe[idx] 访问时,可以从磁盘上的文件夹中读取第 idx 张图像及其对应的标签。
- class torchdata.datapipes.map.MapDataPipe(*args, **kwds)¶
- 映射式 DataPipe。 - 所有表示从键到数据样本映射的数据集都应该继承此类。子类应该覆盖 - __getitem__(),支持获取给定唯一键的数据样本。子类还可以选择覆盖- __len__(),它应该返回数据集的大小,许多- Sampler实现和- DataLoader的默认选项都依赖于此。- 可以使用两种方法调用这些 DataPipes:使用类构造函数或将它们的函数形式应用于现有的 MapDataPipe(推荐,适用于大多数但并非所有 DataPipes)。 - 注意 - DataLoader默认情况下构造一个生成整型索引的索引采样器。为了使其与具有非整型索引/键的映射式 DataPipe 一起工作,必须提供自定义采样器。- 示例 - >>> # xdoctest: +SKIP >>> from torchdata.datapipes.map import SequenceWrapper, Mapper >>> dp = SequenceWrapper(range(10)) >>> map_dp_1 = dp.map(lambda x: x + 1) # Using functional form (recommended) >>> list(map_dp_1) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> map_dp_2 = Mapper(dp, lambda x: x + 1) # Using class constructor >>> list(map_dp_2) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> batch_dp = map_dp_1.batch(batch_size=2) >>> list(batch_dp) [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] 
根据设计,MapDataPipe 比 IterDataPipe 少,以避免重复实现 MapDataPipe 中已有的功能。我们鼓励用户使用内置的 IterDataPipe 来实现各种功能,并根据需要使用 IterToMapConverter 或 .to_map_datapipe() 将其转换为 MapDataPipe。如果您在使用 MapDataPipe 时有任何关于用法或最佳实践的问题,请随时在 PyTorch 论坛的 “数据”类别下提问。
我们乐于添加额外的 MapDataPipe,其中操作可以延迟执行,并且可以预先知道 __len__。欢迎您在 此 Github 问题 中提出建议,并描述您的用例。也欢迎您在该 Github 问题中对我们的设计选择提供反馈。
以下是可用的映射式 DataPipes 列表
MapDataPipes 列表¶
| 创建数据的小批量(函数名: | |
| 连接多个映射 DataPipes(函数名: | |
| 将源 DataPipe 中的元素存储在内存中(函数名: | |
| 延迟加载  | |
| 对源 DataPipe 中的每个项目应用输入函数(函数名: | |
| 将序列对象包装到 MapDataPipe 中。 | |
| 通过其索引随机打乱输入 MapDataPipe(函数名: | |
| 接收一个序列 DataPipe,解包每个序列,并根据它们在序列中的位置将元素返回到单独的 DataPipes 中(函数名: | |
| 从每个输入 DataPipe 中聚合元素到一个元组中(函数名: |