• 文档 >
  • 映射式 DataPipes
快捷方式

映射式 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]]

根据设计,MapDataPipeIterDataPipe 少,以避免重复实现 MapDataPipe 中已有的功能。我们鼓励用户使用内置的 IterDataPipe 来实现各种功能,并根据需要使用 IterToMapConverter.to_map_datapipe() 将其转换为 MapDataPipe。如果您在使用 MapDataPipe 时有任何关于用法或最佳实践的问题,请随时在 PyTorch 论坛的 “数据”类别下提问。

我们乐于添加额外的 MapDataPipe,其中操作可以延迟执行,并且可以预先知道 __len__。欢迎您在 此 Github 问题 中提出建议,并描述您的用例。也欢迎您在该 Github 问题中对我们的设计选择提供反馈。

以下是可用的映射式 DataPipes 列表

MapDataPipes 列表

Batcher

创建数据的小批量(函数名:batch)。

Concater

连接多个映射 DataPipes(函数名:concat)。

InMemoryCacheHolder

将源 DataPipe 中的元素存储在内存中(函数名:in_memory_cache)。

IterToMapConverter

延迟加载 IterDataPipe 中的数据,以使用 key_value_fn 生成的键值对构建 MapDataPipe(函数名:to_map_datapipe)。

Mapper

对源 DataPipe 中的每个项目应用输入函数(函数名:map)。

SequenceWrapper

将序列对象包装到 MapDataPipe 中。

Shuffler

通过其索引随机打乱输入 MapDataPipe(函数名:shuffle)。

UnZipper

接收一个序列 DataPipe,解包每个序列,并根据它们在序列中的位置将元素返回到单独的 DataPipes 中(函数名:unzip)。

Zipper

从每个输入 DataPipe 中聚合元素到一个元组中(函数名:zip)。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源