Hello, I’m complitely new in Pytorch and here is my trouble.
- I create a Dataset with
ImageFolder
- Split indices with sklearn
train_test_split
- Make 2 Subsets.
- Make new MyDataset class like here because I want make different transforms.
- Create 2 DataLoaders
- When I’m trying to take 1 sample from DataLoader(with
next(iter(DataLoader)
) nothing happens. Code runs endlessly. No errors, no warnings.
Here is the code:
# make Dataset
train_data = datasets.ImageFolder(root=train_path)
# all classes list
all_classes = list(
(x.parent.name for x in sorted(
Path('train/simpsons_dataset/').rglob('*.jpg'))))
# split indices
train_indices, val_indices = train_test_split(
range(len(train_data)),
train_size = 0.8,
stratify=all_classes,
random_state=42)
# make Subsets
train_subset = Subset(train_data, train_indices)
val_subset = Subset(train_data, val_indices)
# Dataset class for Subsets
class MyDataset(Dataset):
def __init__(self, subset, transform=None):
self.subset = subset
self.transform = transform
def __getitem__(self, index):
img, label = self.subset[index]
if self.transform:
img = self.transform(img)
return img, label
def __len__(self):
return len(self.subset)
# make new Datasets
train_dataset = MyDataset(train_subset, data_transforms['train'])
val_dataset = MyDataset(val_subset, data_transforms['val'])
# make Dataloaders
train_dataloader = DataLoader(train_dataset, batch_size=64, num_workers=2, shuffle=True)
val_dataloader = DataLoader(val_dataset, batch_size=64, num_workers=2, shuffle=False)
train_dataloader.dataset.transform
#finally I'm trying to iterate my Dataloader
img, label = next(iter(train_dataloader))
print(f"Image shape: {img.shape} ")
print(f"Label shape: {label.shape}")
If I iterate train_data = datasets.ImageFolder(root=train_path)
- everything is ok!
Please help!