【PyTorch】torch.utils.data.DataLoader 简单介绍与使用


一、torch.utils.data.DataLoader 简介

  1. 作用:torch.utils.data.DataLoader 主要是对数据进行 batch 的划分。

数据加载器,结合了数据集和取样器,并且可以提供多个线程处理数据集。

在训练模型时使用到此函数,用来 把训练数据分成多个小组 ,此函数 每次抛出一组数据 。直至把所有的数据都抛出。就是做一个数据的初始化。

  1. 好处:

使用DataLoader的好处是,可以快速的迭代数据。

用于生成迭代数据非常方便。

  1. 注意:

除此之外,特别要注意的是输入进函数的数据一定得是可迭代的。如果是自定的数据集的话可以在定义类中用def__len__、def__getitem__定义。


二、实例

  1. BATCH_SIZE 刚好整除数据量
"""
    批训练,把数据变成一小批一小批数据进行训练。
    DataLoader就是用来包装所使用的数据,每次抛出一批数据
"""
import torch
import torch.utils.data as Data

BATCH_SIZE = 5       # 批训练的数据个数

x = torch.linspace(1, 10, 10)   # 训练数据
print(x)
y = torch.linspace(10, 1, 10)   # 标签
print(y)
# 把数据放在数据库中
torch_dataset = Data.TensorDataset(x, y)  # 对给定的 tensor 数据,将他们包装成 dataset

loader = Data.DataLoader(
    # 从数据库中每次抽出batch size个样本
    dataset=torch_dataset,       # torch TensorDataset format
    batch_size=BATCH_SIZE,       # mini batch size
    shuffle=True,                # 要不要打乱数据 (打乱比较好)
    num_workers=2,               # 多线程来读数据
)

def show_batch():
    for epoch in range(3):
        for step, (batch_x, batch_y) in enumerate(loader):
            # training
            print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))

show_batch()

输出结果:

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])
steop:0, batch_x:tensor([10.,  1.,  3.,  7.,  6.]), batch_y:tensor([ 1., 10.,  8.,  4.,  5.])
steop:1, batch_x:tensor([8., 5., 4., 9., 2.]), batch_y:tensor([3., 6., 7., 2., 9.])
steop:0, batch_x:tensor([ 9.,  3., 10.,  1.,  5.]), batch_y:tensor([ 2.,  8.,  1., 10.,  6.])
steop:1, batch_x:tensor([2., 6., 8., 4., 7.]), batch_y:tensor([9., 5., 3., 7., 4.])
steop:0, batch_x:tensor([ 2., 10.,  9.,  6.,  1.]), batch_y:tensor([ 9.,  1.,  2.,  5., 10.])
steop:1, batch_x:tensor([8., 3., 4., 7., 5.]), batch_y:tensor([3., 8., 7., 4., 6.])

说明:共有 10 条数据,设置 BATCH_SIZE 为 5 来进行划分,能划分为 2 组(steop 为 0 和 1)。这两组数据互斥。

  1. BATCH_SIZE 不整除数据量:会输出余下所有数据

将上述代码中的 BATCH_SIZE 改为 4 :

"""
    批训练,把数据变成一小批一小批数据进行训练。
    DataLoader就是用来包装所使用的数据,每次抛出一批数据
"""
import torch
import torch.utils.data as Data

BATCH_SIZE = 4       # 批训练的数据个数

x = torch.linspace(1, 10, 10)   # 训练数据
print(x)
y = torch.linspace(10, 1, 10)   # 标签
print(y)
# 把数据放在数据库中
torch_dataset = Data.TensorDataset(x, y)  # 对给定的 tensor 数据,将他们包装成 dataset

loader = Data.DataLoader(
    # 从数据库中每次抽出batch size个样本
    dataset=torch_dataset,       # torch TensorDataset format
    batch_size=BATCH_SIZE,       # mini batch size
    shuffle=True,                # 要不要打乱数据 (打乱比较好)
    num_workers=2,               # 多线程来读数据
)

def show_batch():
    for epoch in range(3):
        for step, (batch_x, batch_y) in enumerate(loader):
            # training
            print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))

show_batch()

输出结果:

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])
steop:0, batch_x:tensor([1., 5., 3., 2.]), batch_y:tensor([10.,  6.,  8.,  9.])
steop:1, batch_x:tensor([7., 8., 4., 6.]), batch_y:tensor([4., 3., 7., 5.])
steop:2, batch_x:tensor([10.,  9.]), batch_y:tensor([1., 2.])
steop:0, batch_x:tensor([ 7., 10.,  5.,  2.]), batch_y:tensor([4., 1., 6., 9.])
steop:1, batch_x:tensor([9., 1., 6., 4.]), batch_y:tensor([ 2., 10.,  5.,  7.])
steop:2, batch_x:tensor([8., 3.]), batch_y:tensor([3., 8.])
steop:0, batch_x:tensor([10.,  3.,  2.,  8.]), batch_y:tensor([1., 8., 9., 3.])
steop:1, batch_x:tensor([1., 7., 5., 9.]), batch_y:tensor([10.,  4.,  6.,  2.])
steop:2, batch_x:tensor([4., 6.]), batch_y:tensor([7., 5.])

说明:共有 10 条数据,设置 BATCH_SIZE 为 4 来进行划分,能划分为 3 组(steop 为 0 、1、2)。分别有 4、4、2 条数据。


参考链接

  1. torch.utils.data.DataLoader使用方法
  2. 【Pytorch基础】torch.utils.data.DataLoader方法的使用
  • 102
    点赞
  • 346
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: `torch.utils.data.DataLoader` 是 PyTorch 中用于加载数据的一个重要类。它可以自动地将数据集分成多个批次,并在训练时以迭代器的形式提供数据。 使用方法很简单,只需要将数据集和批次大小传入 `DataLoader` 的构造函数中即可,比如: ``` from torch.utils.data import DataLoader from torchvision import datasets, transforms # 加载 MNIST 数据集 mnist_train = datasets.MNIST('mnist', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])) # 使用 DataLoader 加载数据 train_loader = DataLoader(mnist_train, batch_size=64, shuffle=True) # 迭代训练数据 for data, target in train_loader: # 训练网络 pass ``` 其中 train_loader 为一个迭代器,每次调用 next() 函数即可得到一个批次的数据 你可以使用`num_workers`参数来使用多进程读取数据,可以节省读取数据时间 当然DataLoader也支持并行计算 你可以使用 `torch.utils.data.DataLoader`来创建数据加载器,并可以通过迭代器的形式访问数据 总之,`torch.utils.data.DataLoader` 是 PyTorch 中极其方便的一个类,它可以很好地管理数据的加载和批次的生成。 ### 回答2: torch.utils.data.dataloaderPyTorch中的数据加载器,用于在训练或测试模型时加载数据。它提供了一个高效的数据加载方式,能够有效地减少数据准备的时间,并且能够在训练过程中进行数据增强和预处理。 dataloader的主要功能包括数据加载、数据处理、数据批处理和数据分布式处理。它能够从数据集中逐一读取数据并对其进行处理、组合和转换,同时支持对数据进行分批处理以避免内存溢出和加快计算速度。此外,dataloader还支持在多个进程之间并行加载数据以提高效率,适用于大型数据集和高效计算的场景。 在使用dataloader时,需要指定数据集、批量大小、是否乱序等参数,以及指定数据处理函数和数据转换函数。例如,可以使用transforms模块提供的函数对图像进行裁剪、缩放和旋转,以及转换为PyTorch中的张量。最后,可以使用for循环逐个迭代数据集,利用模型进行训练或测试,同时还可以进行数据增强、数据分布式处理等操作以提高训练效果和计算效率。 总之,torch.utils.data.dataloaderPyTorch中非常重要的数据加载器,在深度学习中的应用非常广泛。它能够高效地加载和处理数据集,并且能够在训练过程中进行数据增强和预处理,是提高深度学习效率和性能的重要工具之一。 ### 回答3: torch.utils.data.dataloaderPyTorch中一个用于将数据加载器实现为Python类的模块。该模块旨在帮助数据科学家和机器学习工程师更轻松地管理和加载数据集。 torch.utils.data.dataloader的主要作用是帮助用户批量读取和处理数据,并在训练模型、评估模型和使用模型进行预测时对其进行优化。在训练神经网络时,通常需要遍历整个数据集多次,并从中随机取出一部分数据进行训练。torch.utils.data.dataloader可以帮助用户在训练过程中自动进行这些操作。 使用torch.utils.data.dataloader有许多优点。首先,该模块提供了一个简单的接口来处理批量数据,减少了繁琐的数据加载过程。其次,它可以自动为数据加载器添加多线程和批量加载机制,从而加速了数据加载过程,提高了模型训练的效率。此外,该模块提供了一些选项来自定义数据加载器的行为,使用户能够根据自己的需求轻松地定制数据加载器。 在使用torch.utils.data.dataloader时,我们需要使用一个数据集类来对数据进行封装,并将其传递给数据加载器。例如,如果我们要加载一个图像分类数据集,我们需要创建一个数据集类来加载数据,并使用这个类来加载数据集。然后,我们可以使用torch.utils.data.dataloader来对数据进行批量处理。 在使用torch.utils.data.dataloader时,我们还需要设置一些参数来配置数据加载器的行为。这些参数包括批量大小、数据并行性、数据加载机制、是否需要打乱数据集等。例如,如果我们想要使用多线程来加载数据,我们可以设置num_workers参数来指定线程数。 总之,torch.utils.data.dataloader是一个非常有用的模块,它可以帮助用户更轻松地管理和加载数据集,并自动进行批量处理和多线程处理,从而提高了模型训练的效率。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值