PyTorch深度学习笔记(六)(DataLoader的使用)
·
前言
Dataset只是去告诉我们程序,我们的数据集在什么位置,数据集第一个数据给它一个索引0,它对应的是哪一个数据。
Dataloader就是把数据加载到神经网络当中,Dataloader所做的事就是每次从Dataset中取数据,至于怎么取,是由Dataloader中的参数决定的。
Dataloader使用
调用DataLoader包
from torch.utils.data import DataLoader
准备测试集数据
test_data = torchvision.datasets.CIFAR10("./dataset_transfrom",train=False,transform=torchvision.transforms.ToTensor())
设置Dataloader操作
test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
batch_size=4 使得 img0, target0 = dataset[0]、img1, target1 = dataset[1]、img2, target2 = dataset[2]、img3, target3 = dataset[3],然后这四个数据作为Dataloader的一个返回
查看测试集中第一张图片及其target
img, target = test_data[0]
print(img.shape)
print(target)
输出结果

可以看出测试集第一张图片为3通道,且大小为32*32
用for循环取出DataLoader打包好的四个数据
for data in test_loader:
img, targets = data
print(img.shape)
print(targets)
输出结果

每个data都是由4张图片组成,img.size 为 [4,3,32,32],四张32×32图片三通道,targets由四个标签组成
完整代码如下
from torch.utils.data import DataLoader
import torchvision
test_data = torchvision.datasets.CIFAR10("./dataset_transform",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
img, target = test_data[0]
print(img.shape)
print(target)
在Tensorboard中展示
每取一次数据为一个step
step = 0
for data in test_loader:
img,target = data
writer.add_images("test_data",img,step)
step = step + 1
batch_size=4的效果

当把drop_last设为Ture时,最后一个step若不足一个batch_size,会直接舍去
完整代码
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import torchvision
test_data = torchvision.datasets.CIFAR10("./dataset_transform",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
writer = SummaryWriter("dataLoader")
step = 0
for data in test_loader:
img,target = data
writer.add_images("test_data",img,step)
step = step + 1
writer.close()
Dataloader多轮次
设置两轮epoch
for epoch in range(2):
对不同Epoch命名
writer.add_images("Epoch:{}".format(epoch),img,step)
先设置shuffle=False的情况,即每轮epoch不洗牌

可以看出不同epoch中相同step的图片不变
再设置shuffle=True的情况,即每轮epoch洗牌

可以看出不同epoch中相同step的图片发生变化,在实际训练中通常设置shuffle=True
完整代码
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import torchvision
test_data = torchvision.datasets.CIFAR10("./dataset_transform",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
writer = SummaryWriter("dataLoader")
for epoch in range(2):
step = 0
for data in test_loader:
img,target = data
writer.add_images("Epoch:{}".format(epoch),img,step)
step = step + 1
writer.close()
更多推荐
所有评论(0)