代码之家  ›  专栏  ›  技术社区  ›  njho

在pytorch教程中,`images,labels=dataiter.next()`如何工作?

  •  0
  • njho  · 技术社区  · 7 年前

    这里是更新的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 但是我想我需要更多的ITER知识。

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   cvanelteren    7 年前

    我认为理解iterable和迭代器之间的区别是至关重要的。iterable是一个可以迭代的对象。迭代器是一个对象,用于使用uuu next_uuu方法在可迭代对象上进行迭代,该方法返回对象的下一项。

    下面是一个简单的例子。考虑ITerable并使用Next方法调用列表中的下一项。这将打印下一个项目,直到到达列表末尾。如果到达末尾,将引发StopIteration错误。

    test = (1,2,3)
    tester = iter(test)
    
    while True:
        nextItem = next(tester)
        print(nextItem)
    

    上面提到的类可能有一个与此类似的实现,但是它返回一个包含图像和标签的元组。