【问题标题】:pytorch deep learning loading data sequentially and efficientlypytorch 深度学习 顺序高效地加载数据
【发布时间】:2021-06-05 22:09:23
【问题描述】:

我一直在对 2 万张“图像”进行神经网络分析,每张图像以 100 * 100 * 100 个神经元的强度形式表示。

x = np.loadtxt('imgfile')
x = x.reshape(-1, img_channels, 100, 100, 100)
//similarly for target variable 'y'

在上面,x 的第一个维度将是图像的数量。我正在使用 DataLoader 在每次迭代期间获取适当数量的图像进行训练,如下所示。

batch_size = 16
traindataset = TensorDataset(Tensor(x[:-testdatasize]), Tensor(y[:-testdatasize]) )
train_loader = DataLoader(dataset=traindataset, batch_size=batch_size, shuffle=True)

for epoch in range(num_epochs):
    for i, (data,targets) in enumerate(train_loader):   
        ... 

我希望将图像数量增加到 50k,但受到计算机内存的限制(imgfile 约为 50 GB)。

我想知道是否有一种有效的方法来处理所有数据?比如,不是加载整个 imgfile,我们可以先将它们分成集合,每个集合有 batch_size 个图像,并在训练期间定期加载集合。我不完全确定如何实现这一点。

我在这里使用 Keras 发现了一些类似的想法:https://machinelearningmastery.com/how-to-load-large-datasets-from-directories-for-deep-learning-with-keras/

请指出任何使用 pytorch 实现的类似想法,或者您有任何想法。

【问题讨论】:

    标签: python machine-learning deep-learning pytorch resnet


    【解决方案1】:

    发布问题后挖掘了一段时间,发现当然有一种使用torch.utils.data.Dataset的方法。每个图像数据都可以保存在一个单独的文件中,所有文件名都列在“filelistdata”中。使用 DataLoader 调用时,只会将 batch_size 数量的图像加载到内存中(在后台,getitem 方法将获取图像)。以下对我有用:

    traindataset = CustDataset(filename='filelistdata', root_dir=root_dir)
    
    train_loader = DataLoader(dataset=traindataset, batch_size=batch_size, num_workers = 16)
    

    num_workers 对性能非常重要,应该高于您正在使用的 Cpus 数量(我上面使用的是 4 个 cpus)。发现以下资源有助于回答此问题。

    How to split and load huge dataset that doesn't fit into memory into pytorch Dataloader?

    https://stanford.edu/~shervine/blog/pytorch-how-to-generate-data-parallel

    https://www.youtube.com/watch?v=ZoZHd0Zm3RY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2020-08-31
      相关资源
      最近更新 更多