pytorch中的DataLoader

前言 

DataLoader 是 PyTorch 中用于数据加载的工具类,它可以帮助我们有效地读取和处理数据集。

介绍与使用方式

简单来说,dataloader的作用就是将数据集变成可以进行遍历的对象,每次迭代可以从数据集中返回一组数据。在模型训练时,我们能可以用DataLoader批量读取数据。

结合代码来理解 

首先我们先准备测试数据

测试数据是由pytorch官方提供的CIFAR10数据

import torchvision

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(), download=True)

这行代码运行之后会下载CFAR10数据集到项目文件夹中的dataset文件夹下。其中train = False表示只下载测试数据,不下载训练数据。transform=torchvision.transforms.ToTensor()表述数据集转换成tensor数据类型。download=True会检测你的dataset文件夹中是否有该数据集,如果已经下载了,就不会继续下载了,如果是false就是不下载数据,所以这个代码运行之后并不需要删掉,不会重复下载数据的。

运行之后就会发现项目文件夹中多了一个文件夹dataset,里面就是存放的我们下载的CFAR10测试数据集

之后我们实例化一个dataload

from torch.utils.data import DataLoader


'''
batch_size=4表示每次取四个数据
shuffle= True表示开启数据集随机重排,即每次取完数据之后,打乱剩余数据的顺序,然后再进行下一次取
num_workers=0表示在主进程中加载数据而不使用任何额外的子进程,如果大于0,表示开启多个进程,进程越多,处理数据的速度越快,但是会使电脑性能下降,占用更多的内存
drop_last=False表示不丢弃最后一个批次,假设我数据集有10个数据,我的batch_size=3,即每次取三个数据,那么我最后一次只有一个数据能取,如果设置为true,则不丢弃这个包含1个数据的子集数据,反之则丢弃
'''
test_load = DataLoader(dataset=test_data, batch_size=4 , shuffle= True, num_workers=0,drop_last=False)

参数的意思已经标注

 我们通过可视化的方式理解一下这个数据

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('logs')
step = 0
for data in test_load:
    imgs,targets = data
    print(imgs.shape)
    print(targets)
    writer.add_images('test_data', imgs, step)
    step += 1

writer.close()

通过tensorboard工具可视化这个dataload对象,前文说了dataload就是将数据集转换成一个可以迭代的方式,所以我们通过佛如循环来看一下每次迭代的都是啥玩意儿

每次迭代会返回两个东西,一个是imgs,表示图片集,前文实例化dataload的时候传入参数batch_size=4表示每次取四个数据,那么这里的imgs就是有四张图片(即每次迭代返回四张图片),而target返回的就是这四张图片对应的标签。

运行代码后会在项目文件夹下多一个logs文件夹(这个跟你实例化SummaryWriter传入的参数一致)里面存的就是运行日志,我们通过在终端中输入

tensorboard --logdir=logs

 就可以得到一个链接,点击链接可查看图片

#logs指的是你日志文件夹的路径,路径是实例化summarywriter时设置的

 可以看到每个step都是四张图片,我们可以拖动上方的条查看每个step的图片。

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PytorchDataLoader是一个方便的数据加载器,它可以批量地加载数据,并在训练神经网络时提供数据。DataLoader的主要作用是将数据集分成批次,并且在每个epoch对数据进行随机化,以避免模型过度拟合。 在使用DataLoader之前,需要先定义一个数据集,并将其传递给DataLoader。数据集需要实现__getitem__和__len__方法,以便DataLoader可以获取每个样本以及数据集的大小。 例如,一个简单的数据集可以如下所示: ```python class MyDataset(Dataset): def __init__(self, data): self.data = data def __getitem__(self, idx): return self.data[idx] def __len__(self): return len(self.data) ``` 然后,可以使用DataLoader对数据集进行批处理: ```python dataset = MyDataset(data) dataloader = DataLoader(dataset, batch_size=32, shuffle=True) ``` 在上面的代码,batch_size参数指定了每个批次的样本数量,shuffle参数指定是否对数据进行随机化。 一旦创建了DataLoader,就可以通过迭代器访问数据集的批次。例如: ```python for batch in dataloader: # 处理当前批次的数据 ``` 需要注意的是,每个批次返回的是一个tensor的列表,而不是单个tensor。这是因为在训练神经网络时,通常需要对输入数据和标签进行分离处理。因此,每个批次包含输入数据和对应的标签。可以使用torch.Tensor.split()方法将tensor列表分离成输入和标签。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值