Train/val/test transforms with torchvision datasets

Hey, so I was wondering what the best way is to apply separate train/test transforms on a torchvision dataset. What I am trying to do is have separate transforms for training, validation and test set (where validation and test transforms is similar)

I currently have everything setup like this (oversimplified):

train_transforms = T.Compose([
     T.RandomCrop(32, padding=4),
     T.RandomHorizontalFlip(),
     T.ToTensor(),
     T.Normalize(mean, std)
])
test_transforms = T.Compose([
      T.ToTensor(),
      T.Normalize(mean, std)
])


train_dataset = CIFAR10(root=PATH, train=True, transform=train_transforms)

targets_ = rain_dataset.targets
train_idx, val_idx = sklearn.model_selection.train_test_split(np.arange(len(targets_)), test_size=0.2, stratify=targets_)
train_sampler = SubsetRandomSampler(train_idx)
val_sampler = SubsetRandomSampler(val_idx)

test_dataset = CIFAR10(root=PATH, train=False, transform=test_transforms)

train_loader = DataLoader(train_dataset, sampler=train_sampler)
val_loader = DataLoader(train_dataset, sampler=val_sampler)
test_loader = DataLoader(test_dataset)

However, doing it this way does also apply the train_transforms to the val_loader, but for validation I would like to not have any augmentation (i.e. I want test_transforms for val_loader)
Is there any straightforward way to apply another transforms to the validation loader?
Like creating a separate Dataset that only contains validation data?

You could create another CUFAR10 dataset using the val_transform and pass it to the DataLoader with the val_sampler to create val_loader.