映射式 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 中聚合元素到一个元组中(函数名: |