PyTorch教程中的“图像,标签= dataiter.next()”如何工作?

时间:2018-11-25 02:51:18

标签: python machine-learning pytorch

此处是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 :(得分:2)

我认为了解可迭代和迭代器之间的区别至关重要。可迭代对象是可以迭代的对象。迭代器是一个对象,用于使用__next__方法迭代可迭代对象,该方法返回该对象的下一项。

以下是一个简单的示例。考虑一个可迭代的对象,并使用next方法调用列表中的下一项。这将打印下一个项目,直到到达列表的末尾。如果到达末尾,将引发StopIteration错误。

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

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

您上面引用的类可能具有类似于此的实现,但是它返回包含图像和标签的元组。