PyTorch的Dataloader使用学习笔记

  • dataset:数据集
  • dataloader:数据加载器

本质:每次从dataset中取数据

怎么取:用dataloader中的数据来设置

在 <pytorch.org> 中:

image-20260806200240779

一些常见的参数设置:

  • dataset

  • batch_size :等于2,代表每次抓2张

  • shuffle:相当于洗牌。(true代表两次不一样),默认是false

  • num_workers:加载数据是单进程还是多进程(默认为0)

    但在Windows下>0会有错

  • drop_last:取牌取不尽,扔不扔

例子:

1
2
3
4
5
6
import torchvision

# 准备测试数据集
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())

test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, numworkes=0, drop_last=False)

相当于每次取4个数据集

1
2
3
4
# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

取出testload中的每一个返回:

1
2
3
4
for data in test_loader:
imgs, targets = data
print(img.shape)
print(targets)

返回是这样子的:

image-20260806203952981

我们继续:

1
2
3
4
5
6
7
8
writet = SummaryWriter("datasloader")
step = 0
for data in test_loader:
imgs, targets = data
writer.add_images("test_data", imgs, step)
step = step + 1
writer.close()

编译指令:

1
tensorboard --logdir="dataloader"

在localhost的网页中:image-20260806204304643

关于droplast的问题:

image-20260806204425503

我们在外面再套一层循环:

1
2
3
4
5
6
7
8
writet = SummaryWriter("datasloader")
for epoch in range(2):
step = 0
for data in test_loader:
imgs, targets = data
writer.add_images("Epoch :{}".format(epoch), imgs, step)
step = step + 1
writer.close()

如果我们前面 shuffle 参数是 true 的话,那样子两次读取得到图片的顺序是不一样的:

image-20260806204617404

dataloader得到的这个东西我们可以用来作为神经网络的输入