Pytorch DataLoader 多数据源

sea*_*ppy 3 machine-learning image-processing python-3.x deep-learning pytorch

我正在尝试使用 Pytorch 数据加载器来定义我自己的数据集,但我不确定如何加载多个数据源:

我目前的代码:

class MultipleSourceDataSet(Dataset):
    def __init__ (self, json_file, root_dir, transform = None):
        with open(root_dir + 'block0.json') as f:
            self.result = torch.Tensor(json.load(f))

    self.root_dir = root_dir
    self.transform = transform

    def __len__(self):
        return len(self.result[0])

    def __getitem__ (self):
        None
Run Code Online (Sandbox Code Playgroud)

数据源是下50个块 root_dir = ~/Documents/blocks/

由于这是一个非常大的数据集,我之前将它们分开并避免直接组合它们。

如何将它们加载到单个数据加载器中?

Sha*_*hai 7

因为DataLoader你需要一个Dataset,你的问题是你有多个'json'文件,你只知道如何分别Dataset从每个文件创建一个'json'
在这种情况下,您可以做的是使用ConcatDataset包含'json'您创建的所有单数据集:

import os
import torch.utils.data as data

class SingeJsonDataset(data.Dataset):
    # implement a single json dataset here...

list_of_datasets = []
for j in os.path.listdir(root_dir):
    if not j.endswith('.json'):
        continue  # skip non-json files
    list_of_datasets.append(SingeJsonDataset(json_file=j, root_dir=root_dir, transform=None))
# once all single json datasets are created you can concat them into a single one:
multiple_json_dataset = data.ConcatDataset(list_of_datasets)
Run Code Online (Sandbox Code Playgroud)

现在您可以将连接的数据集提供给data.DataLoader.

  • 谢谢你。这是一个非常详细的解释。我的问题是,如果我连接所有 .json 文件,文件会变得太大,最终可能会崩溃。但是,无论如何我仍然会尝试这个解决方案。非常感谢! (3认同)
  • 这有更新吗?我还正在处理多个文件,每个文件有多个数据点。 (3认同)