You could use a SubsetRandomSampler, keep your Dataset as it is, and just pass the sampler to your DataLoader.
Assuming real_sample_pos was somehow created, here is a small example:
real_sample_pos = torch.randperm(len(train_dataset.data))[:100]
sampler = sampler.SubsetRandomSampler(real_sample_pos)
loader = DataLoader(
    train_dataset,
    sampler=sampler,
    batch_size=10
)

This would avoid working with the dataset internals, as e.g. now your transformations might not work on self.small_train_set.