互联网技术 / 互联网资讯 · 2024年1月21日

PyTorch中自定义数据集和数据加载器的使用

有时候,在处理大数据集时,一次将整个数据加载到内存中变得非常难。

因此,唯一的方法是将数据分批加载到内存中进行处理,这需要编写额外的代码来执行此操作。对此,PyTorch 已经提供了 DataloadeR 功能。

DataloadeR

下面显示了 PyTorch 库中DataloadeR函数的语法及其参数信息。

DataloadeR(dataset, BATch_size=1, shuFFle=FAlse, saMpleR=None, BATch_saMpleR=None, nuM_woRkeRs=0, collate_fn=None, pin_MeMoRy=FAlse, dRop_last=FAlse, tiMeout=0, woRkeR_inIT_fn=None, *, pRefetch_FAcTor=2, peRsistent_woRkeRs=FAlse)

几个重要参数

dataset:必须首先使用数据集构造 DataloadeR 类。 ShuFFle :是否重新整理数据。 SaMpleR :指的是可选的 Torch.utils.data.SaMpleR 类实例。采样器定义了检索样本的策略,顺序或随机或任何其他方式。使用采样器时应将 ShuFFle 设置为 FAlse。 BATch_SaMpleR :批处理级别。 nuM_woRkeRs :加载数据所需的子进程数。 collate_fn :将样本整理成批次。Torch 中可以进行自定义整理。 加载内置 MNIST 数据集

MNIST 是一个著名的包含手写数字的数据集。下面介绍如何使用DataloadeR功能处理 PyTorch 的内置 MNIST 数据集。

iMpoRt Torch iMpoRt Matplotlib.pyplot as plt fRoM Torchvision iMpoRt datasets, tRansfoRMs

上面代码,导入了 Torchvision 的Torch计算机视觉模块。通常在处理图像数据集时使用,并且可以帮助对图像进行规范化、调整大小和裁剪。

对于 MNIST 数据集,下面使用了归一化技术。

ToTensoR()能够把灰度范围从0-255变换到0-1之间。

tRansfoRM = tRansfoRMs.CoMpose([tRansfoRMs.ToTensoR()])

下面代码用于加载所需的数据集。使用 PyTorchDataloadeR通过给定 BATch_size = 64来加载数据。shuFFle=TRue打乱数据。

tRAInset = datasets.MNIST(””~/.pyTorch/MNIST_data/””, download=TRue, tRAIn=TRue, tRansfoRM=tRansfoRM) tRAInloadeR = Torch.utils.data.DataloadeR(tRAInset, BATch_size=64, shuFFle=TRue)

在 PyTorch 中使用 Datasets 和 DataLoader 自定义数据

为了获取数据集的所有图像,一般使用ITeR函数和数据加载器DataloadeR。

datAIteR = ITeR(tRAInloadeR) images, labels = datAIteR.next() pRint(images.shape) pRint(labels.shape) plt.iMshow(images[1].nuMpy().squeeze(), cMap=””GReYs_R””)

在 PyTorch 中使用 Datasets 和 DataLoader 自定义数据

自定义数据集

下面的代码创建一个包含 1000 个随机数的自定义数据集。

fRoM Torch.utils.data iMpoRt Dataset iMpoRt Random claSS SaMpleDataset(Dataset): def __inIT__(self,R1,R2): Randomlist=[] foR i in Range(120): n = Random.Randint(R1,R2) Randomlist.append(n) self.saMples=Randomlist def __len__(self): RetuRn len(self.saMples) def __getITeM__(self,idx): RetuRn(self.saMples[idx]) dataset=SaMpleDataset(1,100) dataset[100:120]

在 PyTorch 中使用 Datasets 和 DataLoader 自定义数据

在这里插入图片描述

最后,将在自定义数据集上使用 dataloadeR 函数。将 BATch_size 设为 12,并且还启用了nuM_woRkeRs =2 的并行多进程数据加载。

fRoM Torch.utils.data iMpoRt DataloadeR loadeR = DataloadeR(dataset,BATch_size=12, shuFFle=TRue, nuM_woRkeRs=2 ) foR i, BATch in enuMeRate(loadeR): pRint(i, BATch)

在 PyTorch 中使用 Datasets 和 DataLoader 自定义数据

写在后面通过几个示例了解了 PyToRch DataloadeR 在将大量数据批量加载到内存中的作用。

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册