python - 分布式时如何划分数据集
问题描述
现在我想将数据集分为两部分:训练集和验证集。我知道在单个 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)
)
这将为您提供两个单独的数据集,可以根据需要与数据加载器一起使用。
推荐阅读
- apache-storm - 在 Storm 2.2.0 中使用 Flux.main() 以本地模式运行拓扑
- html - 如何在包含在 CDATA 中的 HTML 格式的 XML 字符串中使用主题颜色属性
- php - 无法从本地网络访问 wamp
- sql - 将数据透视到新的列名 - Oracle SQL
- r - R中的x轴标签ggplot2
- swift - 连续语句必须用“;”分隔 迅速
- mysql - 在 mysql 中使用 join 和 DATEDIFF() 创建视图
- botframework - 如何配置 bot 框架 C# slack 适配器以使用多个工作区?
- reactjs - Draft.js 标头未正确呈现
- node.js - 不同端口上的节点服务器和客户端?