8.1 DataLoader的理解(4.10)
同样可以从Pytorch官网官方文档得到解释。
import torchvision.datasets
from torch.utils.data import DataLoader
# 准备的测试集
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)
# 每次取的数量为4;True表示每一轮都重新排序;使用多少个子进程来加载数据,0表示使用主进程;是否舍去不能被4整除而余下的数据,False表示保留
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape) # 显示图像的类型以及分辨率
print(target)
for data in test_loader:
imgs, targets = data
print(imgs.shape)
print(targets)
运行后
# “4"是图片数量;由于在 DataLoader 中未设置"sampler”,默认随机采样
直观理解:将图片信息和类型都各自打包
8.2 drop_last的使用
使用Tensorboard进行展示
import torchvision.datasets
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(test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)
# 每次取的数量为4;True表示每一轮都重新排序;使用多少个子进程来加载数据,0表示使用主进程;是否舍去不能被4整除而余下的数据,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) # add batched image data to summary
step = step + 1
writer.close()
运行后
前面都是8×8张图片,而最后一步则是2×8张。
将"drop_last"设置为"True"后再次运行
可见此时最后一步也是8×8
8.3 shuffle的使用
更改15-23行代码
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) # add batched image data to summary
step = step + 1
当"shuffle=True"时运行
可见两轮中相同步数时选取的图片顺序不同。
而当"shuffle=False"时再次运行,则两轮中相同步数时选取的图片顺序相同。