有两个数据集,一个是干净的,一个是加入了噪声,希望在shuffle=True的情况下取出的数据还是一一对应的。
加载两个数据集:
trainloader_noise=torch.utils.data.DataLoader(trainloader_noise,batch_size=args.batch_size,shuffle=True,num_workers=args.n_cpu,drop_last=True)
trainloader_clean=torch.utils.data.DataLoader(trainloader_clean,batch_size=args.batch_size,shuffle=True,num_workers=args.n_cpu,drop_last=True)
用
for (num,(data_noise,labels)),(num1,(data_clean,labels1)) in zip(enumerate(loader_clean,start=1),enumerate(loader_noise,start=1))取出。
参考pytorch怎么同时让两个dataloader打乱的顺序是相同的? - 知乎
以及Reproducibility — PyTorch 1.10 documentation
可以在两个dataloader实例化之前加入
g=torch.Generator()
g.manual_seed(0)
然后在dataloader中加入参数g
trainloader_noise=torch.utils.data.DataLoader(trainloader_noise,batch_size=args.batch_size,shuffle=True,num_workers=args.n_cpu,drop_last=True,generator=g)
trainloader_clean=torch.utils.data.DataLoader(trainloader_clean,batch_size=args.batch_size,shuffle=True,num_workers=args.n_cpu,drop_last=True,generator=g)
就可以使得两个dataloader的打乱顺序一致