数据集分布时如何划分
How to divide the dataset when it is distributed
现在我想把一个数据集分成两部分:训练集和验证集。我知道在单个 GPU 上我可以使用采样器执行此操作:
indices = list(range(len(train_data)))
train_loader = torch.utils.data.DataLoader(
train_data, batch_size=args.batch_size,
sampler=torch.utils.data.sampler.SubsetRandomSampler(indices[:split]),
pin_memory=True, num_workers=2)
但是当我想使用torch.distributed
以并行方式训练它时,我必须使用另一个采样器,即sampler = torch.utils.data.distributed.DistributedSampler(train_data)
那么两个采样器应该如何使用,才能同时划分数据集并分发?
非常感谢您的帮助!
您可以在创建 torch.utils.data.DataLoader
之前拆分 torch.utils.data.Dataset
。
只需像这样使用torch.utils.data.random_split:
train, validation =
torch.utils.data.random_split(
dataset,
(len(dataset)-val_length, val_length)
)
这将为您提供两个单独的数据集,您可以根据需要将其与数据加载器一起使用。
现在我想把一个数据集分成两部分:训练集和验证集。我知道在单个 GPU 上我可以使用采样器执行此操作:
indices = list(range(len(train_data)))
train_loader = torch.utils.data.DataLoader(
train_data, batch_size=args.batch_size,
sampler=torch.utils.data.sampler.SubsetRandomSampler(indices[:split]),
pin_memory=True, num_workers=2)
但是当我想使用torch.distributed
以并行方式训练它时,我必须使用另一个采样器,即sampler = torch.utils.data.distributed.DistributedSampler(train_data)
那么两个采样器应该如何使用,才能同时划分数据集并分发?
非常感谢您的帮助!
您可以在创建 torch.utils.data.DataLoader
之前拆分 torch.utils.data.Dataset
。
只需像这样使用torch.utils.data.random_split:
train, validation =
torch.utils.data.random_split(
dataset,
(len(dataset)-val_length, val_length)
)
这将为您提供两个单独的数据集,您可以根据需要将其与数据加载器一起使用。