title: PyTorch DataLoader Error: object of type 'type' has no len()
body: <p>I'm quite new to programming and have now clue where my error comes from.</p>
  <p>I got the following code to set up my dataset for training my classifier:</p>
  <pre><code>class cows_train(Dataset):
  
      def __init__(self, folder_path):
          self.image_list = glob.glob(folder_path+'/content/cows/train')
          self.data_len = len(self.image_list)
  
      def __getitem__(self, index):
          single_image_path = self.image_list[index]
          im_as_im = Image.open(single_image_path)
          im_as_np = np.asarray(im_as_im)/255
          im_as_np = np.expand_dims(im_as_np, 0)
          im_as_ten = torch.from_numpy(im_as_np).float()
          class_indicator_location = single_image_path.rfind('/content/cows/train/_annotations.csv')
          label = int(single_image_path[class_indicator_location+2:class_indicator_location+3])
          return (im_as_ten, label)
  
      def __len__(self):
          return self.data_len
  </code></pre>
  <p>And this for the DataLoader:</p>
  <pre><code>transform = transforms.Compose(
      [transforms.ToTensor(),
       transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
  
  batch_size = 4
  
  trainset = cows_train
  trainloader =    torch.utils.data.DataLoader(dataset = trainset, batch_size=10,
  
  shuffle=True, num_workers=2)
  
  classes = ('cow_left', 'cow_other')
  </code></pre>
  <p>As Output I receive:</p>
  <pre><code>TypeError Traceback (most recent call last)
  &lt;ipython-input-6-54702f98a725&gt; in &lt;module&gt;()
        6 
        7 trainset = cows_train
  ----&gt; 8 trainloader = torch.utils.data.DataLoader(dataset = trainset, batch_size=10, shuffle=True, num_workers=2)
        9 
       10 testset = cows_test
  
  2 frames
  /usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py in __init__(self, dataset, batch_size, shuffle, sampler, batch_sampler, num_workers, collate_fn, pin_memory, drop_last, timeout, worker_init_fn, multiprocessing_context, generator, prefetch_factor, persistent_workers)
      264                     # Cannot statically verify that dataset is Sized
      265                     # Somewhat related: see NOTE [ Lack of Default `__len__` in Python Abstract Base Classes ]
  --&gt; 266                     sampler = RandomSampler(dataset, generator=generator)  # type: ignore
      267                 else:
      268                     sampler = SequentialSampler(dataset)
  
  /usr/local/lib/python3.7/dist-packages/torch/utils/data/sampler.py in __init__(self, data_source, replacement, num_samples, generator)
      100                              &quot;since a random permute will be performed.&quot;)
      101 
  --&gt; 102         if not isinstance(self.num_samples, int) or self.num_samples &lt;= 0:
      103             raise ValueError(&quot;num_samples should be a positive integer &quot;
      104                              &quot;value, but got num_samples={}&quot;.format(self.num_samples))
  
  /usr/local/lib/python3.7/dist-packages/torch/utils/data/sampler.py in num_samples(self)
      108         # dataset size might change at runtime
      109         if self._num_samples is None:
  --&gt; 110             return len(self.data_source)
      111         return self._num_samples
      112 
  
  TypeError: object of type 'type' has no len()
  </code></pre>
  <p>Problem is: I don't understand why typ has no length, in my eyes it's defined... Someone please help?</p>
  <p>Add: This is where &quot;return len(self.data_source)&quot; shows up in the code</p>
  <blockquote>
  <pre><code>def num_samples(self) -&gt; int:
      if self._num_samples is None:
          return len(self.data_source)
      return self._num_samples
  </code></pre>
  </blockquote>