code: def _load(cls,
                config: Params,
                serialization_dir: str,
                weights_file: str = None,
                cuda_device: int = -1) -> 'Model':
          
          model_params = config.get('model')
  
          # The experiment config tells us how to _train_ a model, including where to get pre-trained
          # embeddings from.  We're now _loading_ the model, so those embeddings will already be
          # stored in our weights.  We don't need any pretrained weight file anymore, and we don't
          # want the code to look for it, so we remove it from the parameters here.
          remove_pretrained_embedding_params(model_params)
          model = Model.from_params(vocab=None, params=model_params)
  
          # Force model to cpu or gpu, as appropriate, to make sure that the embeddings are
          # in sync with the weights
          if cuda_device >= 0:
              model.cuda(cuda_device)
          else:
              model.cpu()
  
          return model
docs: Ensembles don't have vocabularies or weights of their own, so they override _load.