Pytorch DataLoader 迭代顺序稳定吗?

inf*_*nge 1 iterable deterministic pytorch dataloader

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"])

Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试对其进行测试,但它似乎没有修复,两次运行的顺序相同。有没有办法使订单相同?谢谢

编辑:我也试过做

unlabeled_sampler = data.sampler.SubsetRandomSampler(unlabeled_indices)
unlabeled_dataloader = data.DataLoader(train_dataset, 
                sampler=unlabeled_sampler, batch_size=args.batch_size, drop_last=False)
Run Code Online (Sandbox Code Playgroud)

然后遍历数据加载器两次,但结果是相同的不确定性。

jod*_*dag 5

简短的回答是否定的,当 ashuffle=True的迭代顺序DataLoader在迭代之间不稳定时。每次在加载器上迭代时,内部RandomSampler都会创建一个新的随机顺序。

获得稳定混洗的一种方法DataLoaderSubset使用混洗的索引集创建数据集。

shuffled_dataset = torch.utils.data.Subset(my_dataset, torch.randperm(len(my_dataset)).tolist())
dataloader = DataLoader(shuffled_dataset, batch_size=4, num_workers=4, shuffled=False)
Run Code Online (Sandbox Code Playgroud)