class_docstr: Provide data silos for holdout evaluation.
  
  For this, we first combine the
  instances from all the sets or just some of the sets, then allow to create a different data silo
  instance with a train/test split.
  Calling DataSiloForHoldout.make() creates a list of holdout splits
class_docstr_tok: ["Provide","data","silos","for","holdout","evaluation",".","For","this",",","we","first","combine","the","instances","from","all","the","sets","or","just","some","of","the","sets",",","then","allow","to","create","a","different","data","silo","instance","with","a","train\/test","split",".","Calling","DataSiloForHoldout.make","(",")","creates","a","list","of","holdout","splits"]
code: def __init__(self, origsilo, trainset, devset, testset):
      self.tensor_names = origsilo.tensor_names
      self.data = {"train": trainset, "test": testset}
      self.processor = origsilo.processor
      self.batch_size = origsilo.batch_size
      if devset is not None:
          self.data["dev"] = devset
      else:
          self._create_dev_from_train()
          devset = self.data["dev"]
          trainset = self.data["train"]
      sampler_train = RandomSampler(trainset)
  
      self.data_loader_train = NamedDataLoader(
          dataset=trainset,
          sampler=sampler_train,
          batch_size=self.batch_size,
          tensor_names=self.tensor_names,
      )
      self.data_loader_dev = NamedDataLoader(
          dataset=devset,
          sampler=SequentialSampler(devset),
          batch_size=self.batch_size,
          tensor_names=self.tensor_names,
      )
      self.data_loader_test = NamedDataLoader(
          dataset=testset,
          sampler=SequentialSampler(testset),
          batch_size=self.batch_size,
          tensor_names=self.tensor_names,
      )
      self.loaders = {
          "train": self.data_loader_train,
          "dev": self.data_loader_dev,
          "test": self.data_loader_test,
      }
  
imports: import copy
  import logging
  import torch.multiprocessing
  from contextlib import ExitStack
  from functools import partial
  import random
  from pathlib import Path
  from itertools import chain, groupby
  import numpy
  from sklearn.utils.class_weight import compute_class_weight
  from torch.utils.data import Dataset, Subset, IterableDataset
  from torch.utils.data.distributed import DistributedSampler
  from torch.utils.data.sampler import RandomSampler, SequentialSampler
  import torch
  from sklearn.model_selection import StratifiedKFold, KFold, ShuffleSplit, StratifiedShuffleSplit
  from tqdm import tqdm
  from farm.data_handler.dataloader import NamedDataLoader
  from farm.data_handler.processor import Processor, BertStyleLMProcessor
  from farm.data_handler.utils import grouper
  from farm.data_handler.dataset import ConcatTensorDataset
  from farm.modeling.tokenization import EmbeddingTokenizer
  from farm.utils import MLFlowLogger
  from farm.utils import log_ascii_workers, calc_chunksize
  from farm.utils import get_dict_checksum
  from farm.visual.ascii.images import TRACTOR_SMALL
label_desc: Use image node_id 1 to create a new DataSiloForHoldout object from inherited base classes: DataSilo with example: obj = DataSiloForHoldout(origsilo, trainset, devset, testset)