Map 样式 DataPipes¶
Map 样式 DataPipe 是实现了 __getitem__()
和 __len__()
协议的 DataPipe,它表示从(可能是非整数)索引/键到数据样本的映射。这与 PyTorch 核心库中的 Dataset
非常相似。
例如,当使用 mapdatapipe[idx]
访问时,可以从磁盘上的文件夹中读取第 idx
张图像及其对应的标签。
- class torchdata.datapipes.map.MapDataPipe(*args, **kwds)¶
Map 样式 DataPipe。
所有表示从键到数据样本映射的数据集都应该继承自此类。子类应该覆盖
__getitem__()
,支持为给定的唯一键获取数据样本。子类还可以选择性地覆盖__len__()
,许多Sampler
实现和DataLoader
的默认选项都期望此方法返回数据集的大小。这些 DataPipes 可以通过两种方式调用,使用类构造函数或将其函数形式应用于现有的 MapDataPipe(推荐,大多数 DataPipes 都可用,但并非全部)。
注意
DataLoader
默认情况下会构造一个索引采样器,该采样器会生成整数索引。要使其与具有非整数索引/键的 Map 样式 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 问题中提出。
以下是可用 Map 样式 DataPipes 的列表
MapDataPipes 列表¶
创建数据的小批量(函数名称: |
|
连接多个 Map DataPipes(函数名称: |
|
将源 DataPipe 中的元素存储在内存中(函数名称: |
|
延迟加载来自 |
|
对源 DataPipe 中的每个项目应用输入函数(函数名称: |
|
将序列对象包装成 MapDataPipe。 |
|
通过其索引对输入 MapDataPipe 进行混洗(函数名称: |
|
接收一个包含序列的 DataPipe,解包每个序列,并根据它们在序列中的位置将元素返回到单独的 DataPipes 中(函数名称: |
|
从每个输入 DataPipes 中聚合元素到一个元组中(函数名称: |