DataLoader的使用

1 DataLoader的作用

简单来说,DataLoader就是数据加载器,结合了数据集和取样器,并且可以提供多个线程处理数据集。在训练模型时使用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据。直至把所有的数据都抛出。就是做一个数据的初始化。
在实践中,数据读取经常是训练的性能瓶颈,特别当模型较简单或者计算硬件性能较高时。Pytorch的Dataloader中一个很方便的功能是允许使用多进程来加速数据读取,我们可以通过num_workers来设置使用几个进程读取数据。

dataset和dataloader

2 DataLoader的使用

from torch.utils.data import DataLoader
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=False)

参数解释:
dataset:要取的数据集,一般要返回img和label
batch_size:每次从dataset中取多少数据进行打包
shuffle:是否打乱数据
num_workers:加载数据的时候采用单进程还是多进程,默认设置为0,意为采用主进程进行加载
*注:num_works在windows中会偶尔出现问题,如果遇到workerror可以考虑将num_works设置为0
drop_last:当数据集最后一批小于batch_size时,是否舍去最后一批数据集

test_data = torchvision.datasets.CIFAR10("../dataset",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=False)
img, target = test_data[0]
writer = SummaryWriter("../logs/P11_logs")
step = 0
for data in test_loader:
    imgs, target = data
    writer.add_images("test_data",imgs,step)
    step = step+1
writer.close()

结果:


DataLoader

如果增加epoch,并将shuffle设置为False,drop_last设置为True:

test_data = torchvision.datasets.CIFAR10("../dataset",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=False,num_workers=0,drop_last=True)
img, target = test_data[0]
writer = SummaryWriter("../logs/P11_logs")
for epoch in range(2):
    step = 0
    for data in test_loader:
        imgs, target = data
        writer.add_images("epoch:{}".format(epoch),imgs,step)
        step = step+1
writer.close()
增加epoch.png

将shuffle设置为True后的结果:


打乱.png

参考资料:
1.https://www.bilibili.com/video/BV1hE411t7RN?p=15&spm_id_from=pageDriver
2.https://blog.csdn.net/csdn_of_ding/article/details/109138049
3.https://zhuanlan.zhihu.com/p/234825890

你可能感兴趣的:(DataLoader的使用)