當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch IterDataPipe用法及代碼示例


本文簡要介紹python語言中 torchdata.datapipes.iter.IterDataPipe 的用法。

用法:

class torchdata.datapipes.iter.IterDataPipe(*args, **kwds)

Iterable-style 數據管道。

所有表示可迭代數據樣本的 DataPipes 都應該對其進行子類化。當數據來自流或樣本數量太大而無法全部放入內存時,這種DataPipes 樣式特別有用。

所有子類都應覆蓋 __iter__() ,這將返回此 DataPipe 中的樣本迭代器。

IterDataPipe 被延遲初始化,並且僅當在其迭代器上調用 next() 時才計算其元素。

這些DataPipes可以通過兩種方式調用,使用類構造函數或將它們的函數形式應用到現有的IterDataPipe上(推薦,適用於大多數但不是所有DataPipe)。您可以將多個IterDataPipe鏈接在一起形成一個連續執行多個操作的管道。

注意

當子類與 DataLoader 一起使用時,DataPipe 中的每一項都將從 DataLoader 迭代器中生成。當 num_workers > 0 時,每個工作進程將擁有 DataPipe 對象的不同副本,因此通常需要獨立配置每個副本,以避免從工作進程返回重複的數據。 get_worker_info() 在工作進程中調用時,返回有關工作進程的信息。它可以在數據集的 __iter__() 方法或 DataLoaderworker_init_fn 選項中使用,以修改每個副本的行為。

示例

>>> from torchdata.datapipes.iter import IterableWrapper, Mapper
>>> dp = IterableWrapper(range(10))
>>> map_dp_1 = Mapper(dp, lambda x: x + 1)  # Using class constructor
>>> map_dp_2 = dp.map(lambda x: x + 1)  # Using functional form (recommended)
>>> list(map_dp_1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map_dp_2)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> filter_dp = map_dp_1.filter(lambda x: x % 2 == 0)
>>> list(filter_dp)
[2, 4, 6, 8, 10]

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torchdata.datapipes.iter.IterDataPipe。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。