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

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中自定义数据集和数据加载器的使用

为了获取数据集的所有图像,一般使用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中自定义数据集和数据加载器的使用

自定义数据集

下面的代码创建一个包含 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中自定义数据集和数据加载器的使用

在这里插入图片描述

最后,将在自定义数据集上使用 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中自定义数据集和数据加载器的使用

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