【数据的读取和处理】01 - Dataset和DataLoader

本文介绍了PyTorch中的Dataset和DataLoader类,它们在数据处理和神经网络训练中的作用。Dataset是抽象类,用于统一数据加载接口,而DataLoader封装了数据集,提供了批量加载、打乱和并行加载功能,简化了训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01 - Dataset和DataLoader

从前有两个类

在PyTorch中,Dataset和DataLoader是两个关键的类,用于处理数据加载和预处理,特别是在训练神经网络时。

Dataset类

Dataset是一个抽象类,用于表示数据集。它提供了一个接口,让用户可以自定义数据集的加载和预处理逻辑。用户需要继承Dataset类,并实现__len__和__getitem__方法来定义数据集的大小和如何获取单个样本。Dataset的目的是为了统一数据加载的接口,使得不同类型的数据可以以相同的方式被加载和使用。

它提供了一种方式去获取数据及其label。

DataLoader类

DataLoader用于将Dataset对象封装成可迭代的数据加载器。它提供了批量加载数据、数据打乱、并行加载等功能。DataLoader使得用户可以更方便地迭代训练数据集,并且支持多线程和多进程的数据加载,提高了数据加载的效率。

它为神经网络提供不同的数据形式。

Dataset

理论

常见的数据组成形式:

  • label以文件夹命名区分。
  • label和data分开,label记录在文本中,文本与数据文件名对应。
  • 以文件名作为label。
  1. 这是一个表示数据集的抽象类,用于表示从键到数据样本的映射。所有表示从键到数据样本的数据集都应该是它的子类。
  2. 所有子类都应该重写__getitem__方法,以支持根据给定键获取数据样本。此外,子类还可以选择重写__len__方法,该方法期望返回数据集的大小,许多torch.utils.data.Sampler实现和torch.utils.data.DataLoader的默认选项都会使用这个方法。子类还可以选择实现__getitems__方法,用于加速批量样本加载。这个方法接受样本批次的索引列表,并返回样本列表。
  3. 对于torch.utils.data.DataLoader默认情况下会构建一个索引采样器,该采样器生成整数索引。如果要将其用于具有非整数索引/键的映射样式数据集,则必须提供自定义采样器。
  4. Datasettyping.Generic的子类,这意味着它是一个泛型类。它具有一个类型参数T_co,表示协变的类型。
  5. 该类定义了__add____getitem__方法。__add__方法用于连接两个数据集。__getitem__方法用于根据索引获取数据集中的样本。
  6. 该类还具有一些数据描述符,如__dict____weakref__,以及一些类属性,如__orig_bases____parameters__
  7. 还有一些从typing.Generic继承的类方法和静态方法,如__class_getitem____init_subclass__

实战

from torch.utils.data import Dataset
from PIL import Image
<
在PyTorch中,数据读取是构建深度学习模型的重要一环。为了高效处理大规模数据集,PyTorch提供了三个主要的工具:DatasetDataLoaderTensorDatasetDataset是一个抽象类,用于自定义数据集。我们可以继承Dataset类,并重写其中的__len____getitem__方法来实现自己的数据加载逻辑。__len__方法返回数据集的大小,而__getitem__方法根据给定的索引返回样本对应的标签。通过自定义Dataset类,我们可以灵活地处理各种类型的数据集。 DataLoader数据加载器,用于对数据集进行批量加载。它接收一个Dataset对象作为输入,并可以定义一些参数例如批量大小、是否乱序等。DataLoader能够自动将数据集划分为小批次,将数据转换为Tensor形式,然后通过迭代器的方式供模型训练使用。DataLoader数据准备模型训练的过程中起到了桥梁作用。 TensorDataset是一个继承自Dataset的类,在构造时将输入数据目标数据封装成Tensor。通过TensorDataset,我们可以方便地处理Tensor格式的数据集。TensorDataset可以将多个Tensor按行对齐,即将第i个样本从各个Tensor中取出,构成一个新的Tensor作为数据集的一部分。这对于处理多输入或者多标签的情况非常有用。 总结来说,Dataset提供了自定义数据集的接口,DataLoader提供了批量加载数据集的能力,而TensorDataset则使得我们可以方便地处理Tensor格式的数据集。这三个工具的配合使用可以使得数据处理变得更加方便高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值