Iterator doesn't work with DataLoader on GPU

Question:

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 !?

Answers:

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):

Answered By: Dimitri K. Sifoua

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.

Answered By: Mihai.Mehe