dataloader的使用

dataloader:构建可迭代的数据装载器, 我们在训练的时候,每一个for循环,每一次iteration,就是从DataLoader中获取一个batch_size大小的数据的。

dataloader官网:torch.utils.data — PyTorch 1.11.0 documentation

常用的参数为:

  • dataset: Dataset类, 决定数据从哪读取以及如何读取
  • bathsize: 批大小
  • num_works: 是否多进程读取机制
  • shuffle: 每个epoch是否乱序
  • drop_last: 当样本数不能被batchsize整除时, 是否舍弃最后一批数据

开始测试

准备的测试数据集转换成tensor类型

使用DataLoader并设置参数

import torchvision
from torch.utils.data import DataLoader
# 准备的测试数据集
test_data=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())

test_loader=DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)

 batch_size=4,就相当于把img[0]+target[0]........img[4]+target[4]转换成imgs+targets

 查看测试数据集中的第一章图片类型

img ,target=test_data[0]
print(img.shape)
print(target)

得到输出结果

 想要知道test_loader每一个返回 需要用到for循环

for data in test_loader:
    imgs,targets = data
    print(imgs.shape)
    print(targets)

将batch_size 改为64,使用transbord输出完整代码

import torchvision
from torch.utils.data import DataLoader
# 准备的测试数据集
from torch.utils.tensorboard import SummaryWriter

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]
print(img.shape)
print(target)

writer=SummaryWriter("dataloader")
step=0
for data in test_loader:
    imgs,targets = data
   # print(imgs.shape)
    #print(targets)
    writer.add_images("test_loader",imgs,step)
    step = step + 1

    writer.close()

终端输入

tensorboard --logdir="dataloader"

点击链接查看结果

 他的最后一步会出现只有16张图片的情况,这是因为drop_last 设置的为False剩余图片自动为一组

如果设置为true将自动去掉不足batch_size的部分

 shuffle为true是打乱顺序的 可以使用一下代码进行测试  设置循环 出现Epoch0,Epoch1两组数据

放shuffle=False两组数据是完全相同的 ,shuffle=true时两组数据是不同的

for epoch in range(2):
    step=0
    for data in test_loader:
        imgs,targets = data
       # print(imgs.shape)
        #print(targets)
        writer.add_images("Epoch:{}".format(epoch),imgs,step)
        step = step + 1

 shuffle=true

 shuffle=False

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值