torchdata库的使用!🦔

torchdata库的使用

1.datapipes

1.1 iter

1.1.1 IterableWrapper

在 TorchData 中,torchdata.datapipes.iter.IterableWrapper 是一个用于封装迭代器的类。它允许你将普通的 Python 迭代器包装成一个 TorchData 可用的数据管道(DataPipe),以便进行更加灵活的数据处理和转换。

IterableWrapper 方法的主要作用是将 Python 中的迭代器包装为 TorchData 中的数据管道,使其可以在 TorchData 的数据处理流程中被使用。这个方法接受一个迭代器作为参数,并返回一个实现了 TorchData 数据管道接口的对象,使得你可以在 TorchData 的管道中应用各种数据转换和操作。

1
2
FILE_PATH = 'cmn.txt'
data_pipe = dp.iter.IterableWrapper([FILE_PATH])

总的来说,IterableWrapper 方法为 TorchData 提供了一种便捷的方式来将普通的 Python 迭代器转换为可以在 TorchData 数据处理流程中使用的数据管道。

1.1.2 FileOpener

在 TorchData 中,torchdata.datapipes.iter.FileOpener 是用于打开文件并生成可迭代对象的类。它可以将文件操作转换为 TorchData 中的数据管道,使得可以轻松地在数据处理流程中使用文件数据。

FileOpener 主要用于处理文件数据,例如读取文本文件、图像文件等等。它接受文件路径作为参数,并返回一个实现了 TorchData 数据管道接口的对象,使得可以在 TorchData 的管道中对文件数据进行各种操作和转换。

1
data_pipe = dp.iter.FileOpener(data_pipe, mode='rb')

1.1.3 CSVParser

接受由文件名和 CSV 数据流组成的 DataPipe,一次读取并返回 CSV 文件中的内容。

1
2
3
4
5
6
7
8
9
10
11
12
from torchdata.datapipes.iter import IterableWrapper, FileOpener
import os
def get_name(path_and_stream):
return os.path.basename(path_and_stream[0]), path_and_stream[1]
datapipe1 = IterableWrapper(["1.csv", "empty.csv", "empty2.csv"])
datapipe2 = FileOpener(datapipe1, mode="b")
datapipe3 = datapipe2.map(get_name)
csv_parser_dp = datapipe3.parse_csv()
list(csv_parser_dp)

# 输出
[['key', 'item'], ['a', '1'], ['b', '2'], []]

1.2 map

1.2.1 MapDataPipe

Map 样式的 DataPipe 是实现 __getitem__() and __len__() 协议的 DataPipe,它表示从(可能是非整型)索引/键到数据样本的映射。这与 PyTorch 核心库中的 Dataset 类似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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]]

1.3 bucketbatch

bucketbatch 是 TorchText 中用于将数据集分组成桶(buckets)并生成批次数据的函数。这个函数通常在数据处理和准备阶段使用,特别是在序列到序列(sequence-to-sequence)模型中。

bucketbatch 的作用是将具有相似长度的样本分组到同一个桶中,并且可以选择是否对这些桶进行随机化。随后,对每个桶中的样本进行排序,以便能够产生长度相似的序列,并且可以有效地利用填充(padding)以提高批次处理效率。

1
2
3
4
data_pipe = data_pipe.bucketbatch(
batch_size = 4, batch_num=5, bucket_num=1,
use_in_batch_shuffle=False, sort_key=sortBucket
)
  • 我们保持批量大小 = 4。
  • batch_num 是要保留在存储桶中的批次数
  • bucket_num 是池中用于洗牌的存储桶数
  • sort_key指定获取存储桶并对其进行排序的函数

torchdata库的使用!🦔
https://yangchuanzhi20.github.io/2024/02/25/人工智能/Pytorch/库的使用/pytorch中torchdata库的使用/
作者
白色很哇塞
发布于
2024年2月25日
许可协议