欢迎访问宙启技术站
智能推送

torch.utils.data.dataloader与torchvision.transforms的配合使用

发布时间:2023-12-27 18:05:00

torch.utils.data.DataLoader是一个用于加载数据的工具,它能够将数据组织成batch并进行多进程加载。torchvision.transforms是一个用于图像预处理的工具,它提供了常用的图像变换操作,比如缩放、裁剪、旋转等。这两个工具可以一起使用,用于构建一个用于加载和预处理图像数据的数据加载器。

下面是一个使用torch.utils.data.DataLoader与torchvision.transforms的例子,用于加载和预处理CIFAR-10数据集。

import torch
import torchvision
import torchvision.transforms as transforms

# 定义数据预处理操作
transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),  # 随机水平翻转
    transforms.RandomCrop(32, padding=4),  # 随机裁剪
    transforms.ToTensor(),  # 转为Tensor
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),  # 归一化
])

# 加载训练集数据
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)

# 加载测试集数据
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

# 定义类别标签
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

# 遍历训练集数据
for images, labels in trainloader:
    # 在这里进行模型的训练
    pass

# 遍历测试集数据
for images, labels in testloader:
    # 在这里进行模型的测试
    pass

在这个例子中,首先定义了一个transform变量,它是torchvision.transforms.Compose对象,内部包含了多个数据预处理操作。这些操作会按顺序应用于每个输入图像。在这里,使用了随机水平翻转、随机裁剪、转换为Tensor和归一化等操作。

然后通过torchvision.datasets.CIFAR10函数加载了CIFAR-10数据集,并传入了transform参数,这样在加载数据时会应用transform中定义的预处理操作。

接下来使用torch.utils.data.DataLoader将数据集包装成数据加载器。在这里,设置了batch_size为4,表示每次加载4个样本;shuffle设置为True,表示每个epoch都会对数据进行洗牌以增加模型的泛化性;num_workers设置为2,表示使用2个进程加载数据。

最后,遍历训练集数据和测试集数据,可以使用得到的images和labels进行模型的训练和测试。

通过torch.utils.data.DataLoader与torchvision.transforms的配合使用,可以方便地加载和预处理图像数据,为训练和测试模型提供数据支持。