请考虑以下代码,以从中获取数据进行训练torchvision.datasets
并为其创建数据集DataLoader
。
import torch
from torchvision import datasets, transforms
training_set_mnist = datasets.MNIST('./mnist_data', train=True, download=True)
train_loader_mnist = torch.utils.data.DataLoader(training_set_mnist, batch_size=128,
shuffle=True)
假设有几个Python进程可以访问该文件夹./mnist_data
并同时执行上述代码;在我的情况下,每个进程都是群集上的不同机器,数据集存储在每个人都可以访问的NFS位置。您可能还假定数据已经下载到此文件夹中,因此download=True
应该无效。而且,每个进程都可以使用设置的不同种子torch.manual_seed()
。
我想知道PyTorch是否允许这种情况。我主要关心的是上面的代码是否可以更改数据文件夹或文件,./mnist_data
以便如果由多个进程运行,则有可能导致意外行为或其他问题。另外,假设shuffle=True
我希望两个或多个进程尝试创建DataLoader
它们,那么假设种子不同,则每个进程都会得到不同的数据改组。这是真的?
我主要关心的是上面的代码是否可以更改./mnist_data中的数据文件夹或文件,以便如果由多个进程运行,则有可能导致意外行为或其他问题。
您会很好的,因为进程仅读取数据,而不进行修改(如果为,则将数据加载tensors
到RAM中MNIST
)。请注意,进程不共享内存地址,因此tensor
数据将被多次加载(对于来说,这不是一个大问题MNIST
)。
另外,假设
shuffle=True
我希望两个或多个进程尝试创建DataLoader,则假定种子不同,每个进程都会得到不同的数据改组。
shuffle=True
与数据本身无关。它能做什么,是不是得到__len__()
的提供dataset
,生产一系列[0, __len__())
与这个范围洗牌,用于索引dataset
的__getitem__
。请查看本节以获取有关的更多信息Samplers
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句