【发布时间】:2019-12-12 23:35:00
【问题描述】:
Pytorch Dataloader 的迭代顺序是否保证相同(在温和条件下)?
例如:
dataloader = DataLoader(my_dataset, batch_size=4,
shuffle=True, num_workers=4)
print("run 1")
for batch in dataloader:
print(batch["index"])
print("run 2")
for batch in dataloader:
print(batch["index"])
到目前为止,我已尝试对其进行测试,但似乎没有修复,两次运行的顺序相同。有没有办法使订单相同?谢谢
编辑:我也试过做
unlabeled_sampler = data.sampler.SubsetRandomSampler(unlabeled_indices)
unlabeled_dataloader = data.DataLoader(train_dataset,
sampler=unlabeled_sampler, batch_size=args.batch_size, drop_last=False)
然后遍历数据加载器两次,但结果相同的非确定性。
【问题讨论】:
-
稳定提供
shuffle=False,在您的情况下,您通过设置shuffle=True明确要求以随机顺序返回数据 -
好的,好点。但它是“相同的”数据加载器,不是吗?
-
同一个数据集不是同一个加载器。加载器“只是”数据集的一个接口,其中定义了一个采样器。采样器以定义的方式和顺序对您的数据集进行采样。如果您更改 shuffle,那么您正在更改数据加载器正在使用的采样器,这可以使其从稳定变为不稳定。您还可以在定义数据加载器时显式指定采样器。
-
感谢您的澄清!所以实际上我有:
unlabeled_sampler = data.sampler.SubsetRandomSampler(unlabeled_indices),然后是unlabeled_dataloader = data.DataLoader(train_dataset, sampler=unlabeled_sampler, batch_size=args.batch_size, drop_last=False),迭代顺序仍然不稳定。有什么想法吗? -
我想我现在更了解您的问题了。我发布了一个我相信可以回答您的问题的答案。
标签: pytorch iterable deterministic dataloader