dataset:数据集
dataloader:数据加载器,每次从dataset中取数据,加载到我们需要的神经网络当中,如何取数据由dataloader控制。官网:
# batch_size(int, optional): 每个batch有多少个样本 ,每次从dataset中取4个数据进行一个打包
# shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序
# num_workers (int, optional): 这个参数决定了有几个进程来处理data loading。0意味着所有的数据都会被load进主进程。(默认为0)
# drop_last (bool, optional): 如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…
# 如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。
drop_last用法
# drop_last = True
test_data = torchvision.datasets.CIFAR10("./dataset_cifar10", 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("dataloader")
step = 0
for data in test_loader:
imgs, targets = data
# print(imgs.shape)
# print(targets)
writer.add_images("test_data_droplast", imgs, step)
step = step + 1
结果:
# 当drop_last = False时
结果:
shuffle用法
# shuffle = True 即图片选取顺序不一样
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("dataloader")
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 = False时 即图片选取顺序一样