欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytorch中DataLoader函数

程序员文章站 2022-03-21 19:49:42
...
torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False)

数据加载器。组合数据集和采样器,并在数据集上提供单进程或多进程迭代器。

参数:
dataset (Dataset) – 加载数据的数据集。Dataset对象。
batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。
shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).
sampler (Sampler, optional) – 定义从数据集中提取样本的策略。如果指定,则忽略shuffle参数。
num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
collate_fn (callable, optional) –如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即可
pin_memory (bool, optional) –是否将数据保存在pin memory中,pin memory中的数据转到GPU中可以快一些
drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)

 dataset = torch.utils.data.TensorDataset(train_features, train_labels)
 train_iter = torch.utils.data.DataLoader(dataset, batch_size, shuffle=True)
 dataiter = iter(train_iter)
 train_feature, train_label = next(dataiter)#访问数据集中样本
#常用方法是将其作为一个迭代器进行使用
for train_feature, train_label in train_iter:
	...

train_iter 本质是一个可迭代对象,使用iter()访问,不能使用next()访问;

  • 使用iter(dataloader)返回的是一个迭代器,然后可以使用next访问;

  • 也可以使用for inputs, labels in dataloaders进行可迭代对象的访问;

  • collate_fn可以改变样本拼接方式,如,将空对象样本过滤掉

def my_collate_fn(batch):
	batch = list(filter(lambda x:x[0] is not None, batch))
	return default_collate(batch)
torch.utils.data.DataLoader(dataset, batch_size, shuffle=True, collate_fn=my_collate_fn)