njh*_*jho 4 python machine-learning 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()
Run Code Online (Sandbox Code Playgroud)
如何在最后一行懂得自动分配images, label的images, labels = dataiter.next()?
我检查了DataLoader课程和DataLoaderIter课程,但我认为我需要更多的迭代知识。
我认为理解可迭代和迭代器之间的区别至关重要。可迭代对象是可以迭代的对象。Iterator 是一个对象,用于使用 __next__ 方法迭代可迭代对象,该方法返回对象的下一项。
一个简单的例子如下。考虑一个可迭代对象并使用 next 方法调用列表中的下一项。这将打印下一个项目,直到到达列表的末尾。如果到达末尾,它将引发 StopIteration 错误。
test = (1,2,3)
tester = iter(test)
while True:
nextItem = next(tester)
print(nextItem)
Run Code Online (Sandbox Code Playgroud)
您在上面引用的类可能具有与此类似的实现,但是它返回一个包含图像和标签的元组。