一、DataLoader的使用
1、dataset和dataloader的区别(以扑克牌为例):
①dataset:告诉程序,数据集的位置,数据集的第某个数据(相当于一沓扑克)
②dataloader:加载器,把数据加载到神经网络(手相当于神经网络,去dataset里取数据)
2.参数解释:
3.dataloader的打包过程:
dataset中的数据形式返回的是(img,target)
dataloader打乱后取四个,将img和target分别打包形成imgs和targets
4.dataloader返回值:
for data in test_loader:
imgs,targets = data
print(imgs.shape)
print(targets)
第一个输出:选取了四张照片,三通道,32*32
第二个输出:将target打包
5.实践代码:
①代码:
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
#准备的测试数据集
test_data = torchvision.datasets.CIFAR10(root = "D:\\learn_pytorch\\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)
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
tensorboard --logdir="dataloader"
②结果显示:
最后一张比较特殊:由于drop_last是false
③将drop_last修改为True再运行:
舍去了一些图片
④提取两轮数据,且不打乱(洗牌)
代码:
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
#准备的测试数据集
test_data = torchvision.datasets.CIFAR10(root = "D:\\learn_pytorch\\dataset",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=False,num_workers=0,drop_last=True)
#测试数据集中第一张图片及target
img,target = test_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("Dataloader1")
#提取两轮,两轮一样
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
writer.close()
结果:
⑤提取两轮数据,打乱:
代码:修改shuffle参数,大多情况shuffle为True
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
#准备的测试数据集
test_data = torchvision.datasets.CIFAR10(root = "D:\\learn_pytorch\\dataset",train=False,transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=True)
#测试数据集中第一张图片及target
img,target = test_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("Dataloader1")
#提取两轮,两轮一样
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
writer.close()
结果(上下图片不同):