docs: def num_feats(self):
          """ The number of features per time step in the corpus. """
          if not self._num_feats:
              filename = self.get_train_fns()[0][0]
              feats = np.load(filename)
              # pylint: disable=maybe-no-member
              if len(feats.shape) == 3:
                  # Then there are multiple channels of multiple feats
                  self._num_feats = feats.shape[1] * feats.shape[2]
              elif len(feats.shape) == 2:
                  # Otherwise it is just of shape time x feats
                  self._num_feats = feats.shape[1]
              else:
                  raise ValueError(
                      "Feature matrix of shape %s unexpected" % str(feats.shape))
          return self._num_feats