Есть способ pytorch
сделать это (и я бы посоветовал использовать одну библиотеку для такой простой задачи).
Создание набора данных
Есть готовый внутри torchvision
, а именно ImageFolder
.
Просто используйте его так:
import torchvision
dataset = torchvision.datasets.ImageFolder("./my_data")
Это создаст набор данных, где в папке Good
есть 0
Метка и Bad
имеет метку 1
для каждого изображения в этой папке соответственно.
Разделение на поезд, проверку, тест
Нет необходимости в sklearn
для такой простой работы +torch
также имеет большую часть функциональности numpy
, и я бы предпочел придерживаться одной библиотеки вместо 3 (хотя train_test_split
можно использовать дважды подряд, аналогично тому, что предлагал @ ESZ ).
ИМО проще:
def get_subset(indices, start, end):
return indices[start : start + end]
TRAIN_PCT, VALIDATION_PCT = 0.6, 0.2 # rest will go for test
train_count = int(len(dataset) * TRAIN_PCT)
validation_count = int(len(dataset) * TRAIN_PCT)
indices = torch.randperm(len(dataset))
train_indices = get_subset(indices, 0, train_count)
validation_indices = get_subset(indices, train_count, validation_count)
test_indices = get_subset(indices, train_count + validation_count, len(dataset))
Это создаст индексы для SubsetRandomSampler
и torch.utils.data.DataLoader
.Итак, аналогично @ ESZ еще раз:
dataloaders = {
"train": torch.utils.data.DataLoader(
dataset, sampler=SubsetRandomSampler(train_indices)
),
"validation": torch.utils.data.DataLoader(
dataset, sampler=SubsetRandomSampler(validation_indices)
),
"test": torch.utils.data.DataLoader(
dataset, sampler=SubsetRandomSampler(test_indices)
),
}
Вы можете указать batch_size
и другой аргумент для DataLoader
, см. документацию , если вам нужно большеИнформация.