python - 分布式时如何划分数据集

标签 python pytorch 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.Dataset创建前 torch.utils.data.DataLoader .

只需使用 torch.utils.data.random_split像这样:

train, validation =
    torch.utils.data.random_split(
        dataset, 
        (len(dataset)-val_length, val_length)
    )

这将为您提供两个单独的数据集,可以根据需要与数据加载器一起使用。

关于python - 分布式时如何划分数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61816158/

相关文章:

c++ - 我如何分析纯dll?

python - 在 Python 中实现并行 for 循环

python - 求解 ODE 系统时使用 scipy.integrate.ode 的自适应时间步长

design-patterns - 关于设计松散耦合的完整系统的建议?

python - 消息传递分布式算法框架

java - 使用 Sockets 在客户端和服务器之间传输 HashMap (JAVA)

python - 获取 IMDbPY 中的所有列表 movieID

python - pytorch 数据集中每个类的实例数

python - PyTorch 中神经网络推理时间的波动

python - pytorch:NLLLoss ignore_index 默认值