Как работает `images, label = dataiter.next ()` в PyTorch Tutorial? - PullRequest
0 голосов
/ 25 ноября 2018

Более новые практики Python & PyTorch здесь.

Из учебника cifar10_tutorial как назначается images, labels?

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))


# get some random training images
dataiter = iter(trainloader)

images, labels = dataiter.next()

Как последняя строка знает, как автоматически назначить images, label в images, labels = dataiter.next()?

Я проверил класс DataLoader и класс DataLoaderIter, но думаю, что мне нужно немного больше знаний о нем в целом.

Спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Я думаю, что очень важно понять разницу между итератором и итератором.Итерируемый - это объект, который вы можете перебирать.Итератор - это объект, который используется для итерации итерируемого объекта с использованием метода __next__, который возвращает следующий элемент объекта.

Простой пример заключается в следующем.Рассмотрим итерацию и используйте метод next для вызова следующего элемента в списке.Это напечатает следующий элемент, пока не будет достигнут конец списка.Если конец достигнут, это вызовет ошибку StopIteration.

test = (1,2,3)
tester = iter(test)

while True:
    nextItem = next(tester)
    print(nextItem)

Класс, на который вы ссылаетесь выше, вероятно, имеет реализацию, подобную этой, однако он возвращает кортеж, содержащий изображение и метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...