Function return dataloader does not work with enumerate

Hi all
I tried to define a function to create Dataloader, but when I did so, the returned Dataloader can’t work by using enumerate. Any idea? or I am not supposed to do so? The code is as below:

def create_dataloaders(dirs, phase, transform, batchsize):
phase_dir = dirs + ‘/’ + phase

phase_transforms = transforms.Compose(transform)
phase_dataset = datasets.ImageFolder(phase_dir, transform=transform)
if phase == ‘train’:
dataloaders = torch.utils.data.DataLoader(phase_dataset, batch_size = batchsize, shuffle = True)
else:
dataloaders = torch.utils.data.DataLoader(phase_dataset, batch_size = batchsize, shuffle = False)

return dataloaders

for i, d in enumerate(create_dataloader):
print(i, d)

got error:
TypeError: ‘list’ object is not callable

How about return iter(dataloaders) instead of dataloader?

No, the error is the same. @MariosOreo

Hi Kevin,

In your ‘phase_dataset’, you should have : datasets.ImageFolder(phase_dir, transform=phase_transforms)

Check out: https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html#load-data

Hi DrOrstxo,

sorry, I dont quite follow, I did have datasets.ImageFolder(phase_dir, transform=phase_transforms) just before the ‘if’ sentence as below:

phase_dataset = datasets.ImageFolder(phase_dir, transform=transform)

if phase == ‘train’:
dataloaders = torch.utils.data.DataLoader(phase_dataset, batch_size = batchsize, shuffle = True)
else:
dataloaders = torch.utils.data.DataLoader(phase_dataset, batch_size = batchsize, shuffle = False)

Kevin,

Do you give the right transform param for ImageFolder? What can I see in your code, you define it as ''transform" and not “phase_transforms”.

aha, it’s huge mistake. You are right, I did not pass the right transform to the imagefolder. The issue is solved. very appreciated.

Kevin,

Really glad to be useful. Enjoy with Pytorch!