pytorch 迭代器无法与GPU上的DataLoader配合使用

nfg76nw0  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(418)

我在Google Colab上使用PyTorch,在使用GPU时遇到此错误,

TypeError                                 Traceback (most recent call last)
<ipython-input-33-41cdbc758ecd> in <module>()
----> 1 dataiter= iter(trainloader)

TypeError: '_SingleProcessDataLoaderIter' object is not callable

但如果使用正常CPU,则不会出现错误。
我的代码:

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

import torch
import numpy as np
from torchvision import datasets, transforms

from collections import  OrderedDict

from torch import nn
from torch import  optim
import torch.nn.functional as F
import helper

transform = transforms.Compose([transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset= datasets.MNIST("MINIST_data/", download= True, train=True, transform=transform)
trainloader= torch.utils.data.DataLoader(trainset, batch_size= 64, shuffle=True)
dataiter= iter(trainloader)

使用enumerate而不是iter与GPU一起工作,但我不知道为什么,有人能给我解释一下错误吗?为什么会发生这种情况!?

pgky5nke

pgky5nke1#

你不必使用iter,因为trainloader已经是可迭代的了,循环应该像for data in trainloader:for index, data in enumerate(trainloader):这样完成

jbose2ul

jbose2ul2#

如果只需要加载一个步骤,next()不能与DataLoader一起使用,如下所示:next(data_loader),给出错误:TypeError: 'DataLoader' object is not an iterator.
前进一步:next(enumerate(data_loader))工作。

相关问题