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

时间:2018-11-20 08:59:12

标签: python pytorch torch

torchvision软件包可轻松访问常用数据集。 You would use them like this

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)

显然,您只能在train=Truetrain=False之间切换。 docs解释:

  

train(布尔型,可选)–如果为True,则从training.pt创建数据集,   否则来自test.pt。

但是,这与三分法相违背。为了进行认真的工作,我需要另一个带有验证集的DataLoader。另外,最好自己指定分割比例。他们没有说保留多少数据集用于测试,也许我想更改它。

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

1 个答案:

答案 0 :(得分:2)

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

torch.utils.data.random_split(dataset, lengths)