是否可以将训练 DataLoader(和数据集)拆分为训练和验证数据集?

lhk*_*lhk 5 python torch pytorch

torchvision 包提供了对常用数据集的轻松访问。你会像这样使用它们

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)
Run Code Online (Sandbox Code Playgroud)

显然,您只能在train=True和之间切换train=False。该文档解释:

train (bool, optional) – 如果为 True,则从 training.pt 创建数据集,否则从 test.pt。

但这与三路拆分的常见做法背道而驰。对于严肃的工作,我需要另一个DataLoader带有验证集的。此外,最好自己指定拆分比例。他们没有说明保留用于测试的数据集的百分比,也许我想改变它。

我认为这是一个有意识的设计决定。处理这些数据集之一的每个人都应该使用相同的测试集。这使得结果具有可比性。但我仍然需要从trainloader. 是否可以将 a 拆分DataLoader为两个单独的数据流?

lhk*_*lhk 6

与此同时,我偶然发现了这个方法random_split。因此,您不拆分DataLoader,而是拆分Dataset

torch.utils.data.random_split(dataset, lengths)
Run Code Online (Sandbox Code Playgroud)