#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)