Pytorch DataLoader несколько источников данных - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь использовать загрузчик данных 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

Источник данныхна 50 блоков меньше root_dir = ~/Documents/blocks/

Я разбил их и избегал их непосредственного объединения, поскольку это очень большой набор данных.

Как загрузить их в один загрузчик данных?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Я должен пересмотреть свой вопрос как 2 разных подвопроса:

  1. Как работать с большими наборами данных в PyTorch, чтобы избежать ошибки памяти
  2. Если я разделяю большиеНабор данных в небольшие куски, как я могу загрузить несколько наборов мини-данных

    Для вопрос 1 :

    PyTorch DataLoader может предотвратить эту проблему путем создания мини-пакетов. Здесь вы можете найти дальнейшие объяснения.

    Для вопрос 2 :

    Пожалуйста, обратитесь к ответу Шая выше.

0 голосов
/ 26 ноября 2018

Для 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)

Теперь вы можете кормитьобъединенный набор данных в data.DataLoader.

...