Reputation: 55
I'm using PyTorch on Google Colab, I'm getting this error when Using GPU,
TypeError Traceback (most recent call last)
<ipython-input-33-41cdbc758ecd> in <module>()
----> 1 dataiter= iter(trainloader)
TypeError: '_SingleProcessDataLoaderIter' object is not callable
but wen using normal CPU there is no Error.
My code:
%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)
Using enumerate
instead of iter
works with GPU but I don't know why, can someone explain the error to me and why it is happening !?
Upvotes: 4
Views: 7113
Reputation: 504
If you need to load just one step, next()
does not work with a DataLoader
like this:next(data_loader)
directly, giving the error: TypeError: 'DataLoader' object is not an iterator
.
To go one step:next(enumerate(data_loader))
works.
Upvotes: 6
Reputation: 499
You don't have to use iter. trainloader
is already iterable. The loop should be done like this for data in trainloader:
or for index, data in enumerate(trainloader):
Upvotes: 4