小土堆Pytorch学习笔记(七、DataLoader的使用)

一、DataLoader的使用

Dataloader就是从Dataset中去取数据,每次取多少就看自己设置的参数。
在这里插入图片描述
dataset没有默认值;batch_size的值为每次加载的数据为多少;shuffle的值为前后世代的加载数据是否一样,需不需要“洗牌”;num_workers的值为多个进程加载,默认为0,就是在一个主程序中进行加载,但有时在windows下会有问题。如果报错BrokenPipeError时,就可以考虑将num_worker设置为0;drop_last,如果batch size不能整除的话,当值设置为True时就舍去最后一个batch,如果为False时就不舍去。
示范:

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)
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

结果:

torch.Size([3, 32, 32])
3

运行如下代码:

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)
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

# 取出dataloader中的一个返回
for data in test_loader:
    imgs, targets = data
    print(imgs.shape)
    print(targets)

得到如下结果:
在这里插入图片描述
调试,查看采样器采用随机采样
在这里插入图片描述
再运行如下代码:

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)
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

# 取出dataloader中的一个返回
writer = SummaryWriter("dataloader")
step = 0
for data in test_loader:
    imgs, targets = data
    # print(imgs.shape)
    # print(targets)
    writer.add_images("test_data", imgs, step)
    step = step + 1

writer.close()

再打开tensorboard,结果如下:
在这里插入图片描述
在这里插入图片描述
最后一个step的图片不是8x8的了,因为我的drop_last设置为False了,保留了最后一个不被整除的batch,接下来再对它设置为True,并把shufle设置为False
结果如下:
在这里插入图片描述
在这里插入图片描述
可以看出,它只有155个step了,最后一个八列两行的batch省去了,并且前后两个世代的每个step加载的图片一样。将shuffle的值改为Ture就会不一样了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值