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