DataLoader не случайная выборка в PyTorch - PullRequest
0 голосов
/ 02 мая 2018

Мой DataLoader возвращает мне одно и то же изображение с каждой эпохой. Моя модель просматривает только одно и то же изображение (с индексом '0') каждый раз (размер партии равен 1 ... хотя в любом случае с разными размерами пакетов ничего не меняется).

Вот мой набор данных, урезанный до важных битов:

class MyDataset(Dataset):

    def __init__(self, path, loader=pil_loader):
        self.path = path
        self.images = os.listdir(path)

    def __getitem__(self, index):
        image = self.images[index]

    . . .

А вот набор данных:

train_ds = MyDataset('/data')

А вот мой сэмплер:

train_sampler = RandomSampler(train_ds)

А вот мой DataLoader:

train_dl = DataLoader(train_ds, batch_size=1, sampler=train_sampler)

Я не уверен, почему он каждый раз возвращает мне одно и то же изображение во время подготовка.

У меня RandomSampler настроен не полностью? Или я неправильно написал __getitem__? Я не могу понять это.

1 Ответ

0 голосов
/ 02 мая 2018

Aha. Ну, если кто-то окажется здесь с той же проблемой, я выяснил, что это, и, возможно, это поможет.

Мое определение __len__ было неверным.

Полагаю, случайный сэмплер зависит от того, как вы настроили метод длины.

Шахта была временно смоделирована как

def __len__(self):
    return len(0)

вместо чего-то реального, например:

def __len__(self):
    return len(self.images)
...