目录
1.torch.utils.data.DataLoader概念介绍
2.torch.utils.data.DataLoader参数介绍
DataLoader:[batch_sizeN, C, H, W]+[Target1, Target2, ......., TargetN] ?
1.torch.utils.data.DataLoader概念介绍
Data loader. Combines a dataset and a sampler, and provides an iterable over the given dataset.
- DataLoader是Pytorch中用来处理模型输入数据的一个工具类。
- 组合了数据集(dataset) + 采样器(sampler),
- 并在数据集上提供单线程或多线程(num_workers )的可迭代对象。
只要用PyTorch训练模型,往往都离不开torch.utils.data.DataLoader接口,其主要作用就是将自定义的数据读取接口的输出或者PyTorch已有的数据接口的输入按照batch size分装成Tensor,后续只需要在包装成Variable即可作为模型的输入。
From:PyTorch源码解读之torch.utils.data.DataLoader
2.torch.utils.data.DataLoader参数介绍
torch.utils.data.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)
- dataset (Dataset) :加载数据的数据集。
- batch_size (int, optional) : 每个batch加载多少个样本(默认: 1)。
- shuffle (bool, optional) :设置为True时会在每个epoch重新打乱数据(默认: False)。
- sampler (Sampler, optional) : 定义从数据集中提取样本的策略,即生成index的方式,可以顺序也可以乱序。
- num_workers (int, optional): 用多少个子进程加载数据。0:数据将在主进程中加载(默认: 0)
- collate_fn (callable, optional) :将一个batch的数据和标签进行合并操作。
- pin_memory (bool, optional) :设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
- drop_last (bool, optional):如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)
- timeout:用来设置数据读取的超时时间的,但超过这个时间还没读取到数据的话就会报错。
- worker_init_fn(callable, optional):如果不是None,将在播种之后和数据加载之前,对每个worker子进程使用worker id (int in [0, num_workers - 1])作为输入调用。(默认值:None)
如果设置为多进程读取数据,那么就会采用队列的方式来读,如果不是采用多进程来读取数据,那就采用普通方式来读。
3 案例体会
#案例 from https://blog.csdn.net/weixin_43981621/article/details/119685671
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
# 准备的测试数据集 数据放在了CIFAR10文件夹下
test_data = torchvision.datasets.CIFAR10(
"./CIFAR10",
train=False,
transform=torchvision.transforms.ToTensor()
)
test_loader = DataLoader(
dataset=test_data,
batch_size=4,
shuffle=True,
num_workers=0,
drop_last=False
)
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)
# 输出
torch.Size([3, 32, 32]) # 3表示图像是RGB通道的,32*32的尺寸
3 # 3表示图像的类别是3
# 设置参数batch_size=4时,每次取了4张照片,并获得4个targets标签。
# 在定义test_loader时,设置了batch_size=4,表示一次性从数据集中取出4个数据
for data in test_loader:
imgs, targets = data
print(imgs.shape)
print(targets)
# 输出
torch.Size([4, 3, 32, 32]) # 4 :batch_size = 4, RGB通道,H,W
tensor([8, 9, 1, 0]) # 表示一次性取出的4张图像的target信息
PyTorch源码解读之torch.utils.data.DataLoader
pytorch-DataLoader(数据迭代器)_数据迭代器