PyTorch. ValueError: num_samples should be a positive integer value, but got num_samples=0

Знакомлюсь с библиотекой PyTorch. Разрабатываю GAN, который будет генерировать изображения с использованием контекста. Отсюда требование накладывать маску на изображения из обучающей выборки и невозможность использовать стандартный класс загрузки и предобработки (ImageFolder). Вот часть используемого класса:

class ImageDataset(Dataset):
    def __init__(self, root, transforms_=None, image_size=image_size, mask_size=mask_size, mode="train"):
        self.transform = transforms.Compose(transforms_)
        self.image_size = image_size
        self.mask_size = mask_size
        self.mode = mode
        self.files = sorted(glob.glob("%s/**/*.jpg" % root, recursive=True))
        self.files = self.files[-4000:] if mode == "train" else self.files[:-4000]
...    
    def __len__(self):
        return len(self.files)

В программе выполняется следующий код:

    transforms_ = [
        transforms.Grayscale(1),
        transforms.Resize((image_size, image_size), Image.BICUBIC),
        transforms.ToTensor(),
        transforms.Normalize((0.5, ), (0.5, )),
    ]
    img_dset = ImageDataset(path, transforms_=transforms_)
    print(len(img_dset))
    dataloader = DataLoader(
        img_dset,
        batch_size=batch_size,
        shuffle=True,
        num_workers=workers,
    )

Ошибка в строке создания загрузчика:

dataloader = DataLoader(...

Описание которой гласит:

C:\Users\Павел\AppData\Local\Programs\Python\Python38\lib\site-packages\torchvision\transforms\transforms.py:257: UserWarning: Argument interpolation should be of type InterpolationMode instead of int. Please, use InterpolationMode enum. warnings.warn( Traceback (most recent call last): File "C:/Users/Павел/PycharmProjects/myFirstGAN/context_train.py", line 82, in test_dataloader = DataLoader( File "C:\Users\Павел\AppData\Local\Programs\Python\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 266, in init sampler = RandomSampler(dataset, generator=generator) # type: ignore File "C:\Users\Павел\AppData\Local\Programs\Python\Python38\lib\site-packages\torch\utils\data\sampler.py", line 103, in init raise ValueError("num_samples should be a positive integer " ValueError: num_samples should be a positive integer value, but got num_samples=0

Среди ответов людей на тот же вопрос от других пользователей были предположения о том, что:

  1. Указан неверный путь к данным.
  2. Отсутствует или неверно определен метод len.

Но я честно не понимаю, в чем проблема. len выводит 1044 (столько данных и имеется), а значит и путь указан верный. Как итог, не смог самостоятельно разобраться в проблеме и прошу Вашей помощи.


Ответы (1 шт):

Автор решения: Pavel

Проблема оказалась в строке класса:

self.files = self.files[-4000:] if mode == "train" else self.files[:-4000]

Преобразование не удовлетворяет входу загрузчика.

→ Ссылка