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
Среди ответов людей на тот же вопрос от других пользователей были предположения о том, что:
- Указан неверный путь к данным.
- Отсутствует или неверно определен метод len.
Но я честно не понимаю, в чем проблема. len выводит 1044 (столько данных и имеется), а значит и путь указан верный. Как итог, не смог самостоятельно разобраться в проблеме и прошу Вашей помощи.
Ответы (1 шт):
Проблема оказалась в строке класса:
self.files = self.files[-4000:] if mode == "train" else self.files[:-4000]
Преобразование не удовлетворяет входу загрузчика.