Загрузка знакомств без отдельного каталога ПОЕЗДОВ/ТЕСТОВ : Pytorch (заполнитель изображений)

#deep-learning #pytorch #dataloader

Вопрос:

Мои данные распространяются не в каталогах обучения и тестирования, а только в классах. Я имею в виду:

 image-folders/
   ├── class_0/
   |   ├── 001.jpg
   |   ├── 002.jpg
   └── class_1/
   |   ├── 001.jpg
   |   └── 002.jpg
   └── class_2/
       ├── 001.jpg
       └── 002.jpg
 

Является ли это правильным подходом к проблеме (что это делает: возьмите заполнитель данных и разделите его на обучающий, действительный и тестовый наборы. Тем не менее, я беспокоюсь, если это то же самое, что и допустимый набор/dev, даже если «набор тестов» не пройдет цикл обучения и проверки):

         data = datasets.ImageFolder('PATH', transform)
        # creating a train / valid split
# valid set will be further divided into valid and test sets
indices = list(range(len(data)))
np.random.shuffle(indices)
split = int(np.floor(valid_size * len(data)))
train_idx, valid_idx = indices[split:], indices[:split]

# Creating a valid and test set
valid_idx = valid_idx[int(np.floor(0.2*len(valid_idx))) : len(valid_idx)]
test_idx = valid_idx[0:int(np.floor (0.2 * len(valid_idx) ) )]

# define samplers for obtaining training and validation batches
train_sampler = SubsetRandomSampler(train_idx)
valid_sampler = SubsetRandomSampler(valid_idx)
test_sampler = SubsetRandomSampler(test_idx)    
    # prepare data loaders (combine dataset and sampler)
        train_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, sampler=train_sampler, num_workers=num_workers)
        valid_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, sampler=valid_sampler, num_workers=num_workers)
        test_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, sampler=test_sampler  num_workers=num_workers)
 

Заранее спасибо.

Комментарии:

1. Ваш вопрос о поездных/допустимых/тестовых наборах по сравнению с поездными/допустимыми наборами?

2. Я знаю разницу между поездом/действительным и поездом/действительным/тестом/наборами.. Мой вопрос скорее касается загрузки данных с помощью pytorch. Загрузка данных с помощью pytorch, когда они не разделены в каталогах train и test……. Кроме того, можно ли разделить данные так, как я сделал в приведенном выше коде. разделение поезда, допустимого и тестового набора из одного и того же заполнителя изображений (pytorch требует создания разных для поезда и теста)

Ответ №1:

Мне это кажется нормальным. В качестве альтернативы вы можете создать три отдельных набора данных data , используя torch.utils.data.random_split . Это имеет то преимущество, что вам не нужно беспокоиться о внедрении сэмплеров для ваших загрузчиков данных:

 from torch.utils.data import DataLoader, random_split

dl_args = dict(batch_size=batch_size, num_workers=num_workers)
 
  • С разделением поезда/проверки:
     >>> data = datasets.ImageFolder('PATH', transform)
    >>> n_val = int(np.floor(valid_size * len(data)))
    >>> n_train = len(data) - n_val
     

    Инициализация наборов данных и загрузчиков данных:

     >>> train_ds, val_ds = random_split(data, [n_train, n_val])
    
    >>> train_dl = DataLoader(train_ds, **dl_args)
    >>> valid_dl = DataLoader(val_ds , **dl_args)
     
  • С разделением поезда/проверки/теста:
     >>> data = datasets.ImageFolder('PATH', transform)
    >>> n_val = int(np.floor(valid_size * len(data)))
    >>> n_test = int(np.floor(test_size * len(data)))
    >>> n_train = len(data) - n_val - n_test
     

    Инициализация наборов данных и загрузчиков данных:

     >>> train_ds, val_ds, test_ds = random_split(data, [n_train, n_val, n_test])
    
    >>> train_dl = DataLoader(train_ds, **dl_args)
    >>> valid_dl = DataLoader(val_ds, **dl_args)
    >>> test_dl = DataLoader(test_ds, **dl_args)