【学习笔记】【Pytorch】五、DataLoader的使用

学习地址

PyTorch深度学习快速入门教程【小土堆】.

主要内容

一、DataLoader模块介绍
介绍:分配数据集。
二、DataLoader类的使用
作用:数据加载器。组合数据集和采样器,在给定数据集上时可迭代的。

一、DataLoader模块介绍

from torch.utils.data import DataLoader

介绍:通常在使用pytorch训练神经网络时,DataLoader模块是整个网络训练过程中的基础前提且尤为重要,其主要作用是根据传入接口的参数将训练集分为若干个大小为batch size的batch以及其他一些细节上的操作。
DataLoader.py文件结构
图片

二、DataLoader类的使用

在这里插入图片描述

作用:数据加载器。组合数据集和采样器,在给定数据集上时可迭代的。

1.使用说明

【实例化】DataLoader(dataset: Dataset[T_co],
batch_size: Optional[int] = 1,
shuffle: Optional[bool] = None,
sampler: Union[Sampler, Iterable, None] = None,
batch_sampler: Union[Sampler[Sequence],
Iterable[Sequence], None] = None,
num_workers: int = 0,
collate_fn: Optional[_collate_fn_t] = None,
pin_memory: bool = False, drop_last: bool = False,
timeout: float = 0,
worker_init_fn: Optional[_worker_init_fn_t] = None,
multiprocessing_context=None, generator=None,
*, prefetch_factor: int = 2,
persistent_workers: bool = False,
pin_memory_device: str = “”)

  • 作用:创建一个数据集的实例。

  • 参数说明:
    batch_size(int,可选):每个batch(批次)要加载多少个样本(默认值:1)。
    在这里插入图片描述

  • 例子:

# 创建 CIFAR10 实例,测试集(注:初始为PIL图片)
test_set = datasets.CIFAR10(root="./dataset", train=False, transform=transforms.ToTensor())

# 创建 DataLoader 实例
test_loader = DataLoader(dataset=test_set, batch_size=4, shuffle=True, num_workers=0, drop_last=False)

【可迭代对象】for data in DataLoader_object

  • 作用:依次遍历每一个batch(批次),每一个batch有batch_size张图片。
for data in test_loader:  # 可迭代对象
    imgs, targets = data  # 两个参数
    # torch.Size([4, 3, 32, 32]),参数1-打包几(batch_size)张图片;参数2-图片通道;参数3、4-图片像素大小
    print(imgs.shape)
    # tensor([3, 3, 8, 9]),4张图片的分别的类别索引
    print(targets)

2.代码实现

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms, datasets
from torch.utils.data import DataLoader


# 创建 CIFAR10 实例,测试集(注:初始为PIL图片)
test_set = datasets.CIFAR10(root="./dataset", train=False, transform=transforms.ToTensor())

# 创建 DataLoader 实例
test_loader = DataLoader(dataset=test_set, batch_size=4, shuffle=True, num_workers=0, drop_last=False)

# 测试数据集中的第一张图片及target
img, target = test_set[0]  # __getitem__:下标获取类中对应元素值
print(img.shape)
print(target)

writer = SummaryWriter("dataloader_logs")  # 创建实例


print("test_loader-len:", len(test_loader))
for epoch in range(2):  # 演示不同epoch,数据集的顺序是否打乱(shuffle=True)
    step = 0
    for data in test_loader:  # 可迭代对象
        imgs, targets = data
        # torch.Size([4, 3, 32, 32]),参数1-打包几(batch_size)张图片;参数2-图片通道;参数3、4-图片像素大小
        print("\nimgs.shape:\n", imgs.shape)
        # tensor([3, 3, 8, 9]),4张图片的分别的类别索引
        print("\ntargets:\n", targets)

        writer.add_images("Epoch {} test_data".format((epoch)), imgs, step)  # 注:writer.add_image()适用于单张图片
        step += 1

writer.close()

控制台输出

torch.Size([3, 32, 32])
3
test_loader-len: 2500

imgs.shape:
 torch.Size([4, 3, 32, 32])

targets:
 tensor([1, 1, 4, 6])

imgs.shape:
 torch.Size([4, 3, 32, 32])

targets:
 tensor([9, 7, 8, 0])
 ....
 ....
 ....

TensorBoard输出

  • 不同epoch,数据集的顺序打乱。(shuffle=True)
  • 数据集大小不被batch size整除时,不将最后比较小的batch给丢弃。(drop_last=False)
  • batch_size=4
    在这里插入图片描述
    TensorBoard输出
  • 不同epoch,数据集的顺序不打乱。(shuffle=False)
  • 数据集大小不被batch size整除时,不将最后比较小的batch给丢弃。(drop_last=False)
  • batch_size=64
    在这里插入图片描述

在这里插入图片描述
TensorBoard输出

  • 数据集大小不被batch size整除时,将最后比较小的batch给丢弃。(drop_last=True)
    -

好的文章

Pytorch源码解读——DataLoader模块

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch中的dataloader是一个用于加载数据的工具,它可以将数据集分成小批次进行处理,提高了数据的利用效率。使用dataloader可以方便地对数据进行预处理、增强和扩充等操作。 在使用dataloader时,需要先定义一个数据集,然后将其传入dataloader中。可以设置批次大小、是否随机打乱数据等参数。在训练时,可以通过for循环遍历dataloader中的数据,对每个小批次进行处理。 使用dataloader可以大大简化数据处理的流程,提高代码的可读性和可维护性。同时,它也可以充分利用GPU的并行计算能力,加快训练速度。 ### 回答2: PyTorch 是一个广泛用于机器学习深度学习的 Python 库。Dataloader 作为 PyTorch 中数据预处理的常用工具,可以提供数据集处理和批量获取数据的功能,并且可以快速创建训练和测试数据的 batches,使得模型的训练和测试更为高效。 Dataloader 有以下几个关键参数: 1. dataset:需要加载的数据集,可以是自己定义的数据集或者是 PyTorch 提供的数据集; 2. batch_size:指定每个 batch 中的样本数; 3. shuffle:是否对数据进行 shuffle,让样本之间彼此独立; 4. num_workers:表示用于读取数据的子线程数。 Dataloader使用步骤如下: 1. 定义数据集(dataset),将预处理好的数据存放在数据集中,并实现 __getitem__ 方法和 __len__ 方法,分别返回数据和数据集的长度。 2. 调用 DataLoader 类,将定义好的数据集传递给 DataLoader,同时指定 batch_size、shuffle、num_workers 等关键参数,即可创建一个 Dataloader。 3. 迭代 Dataloader,可以获取一批数据,按照 batch_size 分组,并进行 shuffle,保证每个 batch 中的数据的随机顺序。 在使用 Dataloader 时,可以利用 PyTorch 提供的 Dataset 类和数据相关的函数,来对数据进行预处理、转换等操作,使得数据集和数据的处理更加简单和高效。 总之,DataloaderPyTorch 中常用的数据预处理工具,它可以帮助我们更加高效和简单地处理数据,并且可以帮助训练模型更加高效和准确。对于机器学习深度学习领域的开发人员来说,Dataloader 是不可或缺的一个工具。 ### 回答3: PyTorch是一个非常流行的深度学习框架,它的特点是灵活性强,易于使用,还有强大的自动求导功能。在PyTorch中,dataloader是一个非常重要的工具,它可以方便地载入数据集,并将其转换为可以被模型训练的tensor形式。在本文中,我们将介绍一下PyTorch中关于dataloader使用。 首先,我们需要明确一下dataloader的作用和功能。在PyTorch中,我们可以通过dataloader将数据集分成多个batch,每个batch中包含一批数据样本。这个过程可以通过设置batch_size参数来实现。在模型训练的过程中,我们需要将数据集中每个batch的所有样本都加载到内存中,进行模型的训练。这个过程可以通过调用dataloader中的next()函数来实现。 使用PyTorchdataloader需要完成以下几个步骤: 1. 加载数据集:PyTorch中支持多种不同的数据集格式,例如ImageFolder、Dataset等。我们需要根据数据集的格式来进行相关操作,将数据集载入到内存中。 2. 创建dataloader:在数据集载入到内存后,我们需要创建dataloader对象,并设置相关参数。除了batch_size之外,还可以设置shuffle参数来打乱数据集,num_workers参数来创建多个子进程来处理数据的读取和转换等操作。 3. 使用dataloader:在创建完dataloader后,我们可以使用next()函数从dataloader中读取下一批数据。这些数据将以Tensor的形式返回,可以直接用于模型的训练。对于一个完整的数据集,我们通常需要多次使用next()函数,直到所有数据都被读取和处理完毕为止。 使用dataloader的好处是可以大大提升模型训练的效率和效果。当我们的数据集非常大时,使用dataloader可以将数据按批分割,进行逐步处理,从而避免了在内存中同时处理大量数据所带来的负担。此外,dataloader还可以对数据集进行随机化操作,从而提升模型的泛化能力。 总之,PyTorchdataloader是一个非常强大的数据处理工具,它可以帮助我们处理大规模数据集,并将其转换为可以被模型训练的tensor形式。使用dataloader可以大大提升模型训练的效率和效果,是深度学习中一个非常重要的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值