Kevin_Li
(Kevin Li)
April 18, 2019, 3:27pm
1
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
?
Kevin_Li
(Kevin Li)
April 19, 2019, 2:07pm
3
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
Kevin_Li
(Kevin Li)
April 19, 2019, 2:31pm
5
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”.
Kevin_Li
(Kevin Li)
April 19, 2019, 2:44pm
7
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!