使用yolo等算法进行获取加载数据进行训练、验证等,基本上都是以每轮获取所有数据,每轮中又分批次(batch)获取图片和标签,大概结构可以用以下的代码进行概括:
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torch.utils.data import DataLoader
trans_dataset = torchvision.transforms.Compose([
torchvision.transforms.ToTensor()
])
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=trans_dataset, download=True)
test_loader = DataLoader(dataset=test_set, batch_size=64, shuffle=False, num_workers=16, drop_last=True)
writer = SummaryWriter("log")
step = 0
for epoch in range(2):
for data in test_loader:
imgs, targets = data
writer.add_images("Epoch {}".format(epoch), imgs, step)
step += 1
writer.close()
经过dataloader后得到的是个迭代器,其中迭代器的每个元素是个集合:[ batch张图片的集合,batch个label的集合 ]
大概结构如下:
利用tensorboard查看每轮每批获取到的数据更加直观,运行完以上代码后,在terminal执行命令:tensorboard --logdir=log
打开网页:
因为shuffle为False所以每轮都以相同的顺序获取数据,可以看到图中两轮获取到的一模一样。
若shuffle为True,再次运行,结果如下:
此时每轮获取的顺序就不一样了。