I have also tried to pass the Subset to a DataLoader, but still no luck:
clean_train_loader = torch.utils.data.DataLoader(
    clean_train_set,
    batch_size=1,
    shuffle=True,
    num_workers=0,
)

for step, data in enumerate(clean_train_loader):
    print(data)
    break

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
----> 1 for step, data in enumerate(clean_train_loader):
      2     print(data)
      3     break

C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\dataloader.py in __next__(self)
    343 
    344     def __next__(self):
--> 345         data = self._next_data()
    346         self._num_yielded += 1
    347         if self._dataset_kind == _DatasetKind.Iterable and \

C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\dataloader.py in _next_data(self)
    383     def _next_data(self):
    384         index = self._next_index()  # may raise StopIteration
--> 385         data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
    386         if self._pin_memory:
    387             data = _utils.pin_memory.pin_memory(data)

C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\_utils\fetch.py in fetch(self, possibly_batched_index)
     42     def fetch(self, possibly_batched_index):
     43         if self.auto_collation:
---> 44             data = [self.dataset[idx] for idx in possibly_batched_index]
     45         else:
     46             data = self.dataset[possibly_batched_index]

C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\_utils\fetch.py in (.0)
     42     def fetch(self, possibly_batched_index):
     43         if self.auto_collation:
---> 44             data = [self.dataset[idx] for idx in possibly_batched_index]
     45         else:
     46             data = self.dataset[possibly_batched_index]

C:\ProgramData\Anaconda3\lib\site-packages\torch\utils\data\dataset.py in __getitem__(self, idx)
    255 
    256     def __getitem__(self, idx):
--> 257         return self.dataset[self.indices[idx]]
    258 
    259     def __len__(self):

TypeError: 'DataLoader' object is not subscriptable

I can somehow iterate over the dataset using clean_train_loader.dataset.dataset, but it seems like it is actually the original full set which has been enumerated over, not the subset:
print(len(clean_loader))
print(len(clean_train_loader))
i = 0
for step, data in enumerate(clean_train_loader.dataset.dataset):
    i += 1
print(i)

6929
5543
6929

I found some discussion referring that by doing data_loader.dataset.dataset it traces back to the original full set, but if such being the case, how can I iterate through the subset per se? I am really confused here. Desperately need some help here.