Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterator doesn't work with DataLoader on GPU

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

like image 616
Abd El-Rahman Akram Avatar asked Sep 17 '25 05:09

Abd El-Rahman Akram


1 Answers

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.

like image 61
Mihai.Mehe Avatar answered Sep 19 '25 19:09

Mihai.Mehe