code: def __iter__(self):
      if self.shuffle:
          r = torch.randperm(self.dataset_len)
          self.data_dict = {
              k: v[r] if isinstance(v, Iterable) else v
              for k, v in self.data_dict.items()
          }
      self.i = 0
      return self
  
imports: from typing import Callable, Dict
  import torch
  from torch.utils.data import Dataset
  import torchvision.transforms.functional
  from torchvision import transforms
  import pytorch_lightning
  from collections.abc import Iterable
  from pathlib import Path
  from PIL import Image
  from typing import Tuple
label_desc: Use image node_id 2 for calling the DataDictLoader obj's underlying member method code with example usage: obj.__iter__() and returns: self