class_docstr: This is the base estimator for gluoncv.auto.Estimators.
  
  Parameters
  ----------
  config : dict
      Config in nested dict.
  logger : logging.Logger
      Optional logger for this estimator, can be `None` when default setting is used.
  reporter : callable
      The reporter for metric checkpointing.
  name : str
      Optional name for the estimator.
  
  Attributes
  ----------
  _logger : logging.Logger
      The customized/default logger for this estimator.
  _logdir : str
      The temporary dir for logs.
  _cfg : autocfg.dataclass
      The configurations.
class_docstr_tok: ["This","is","the","base","estimator","for","gluoncv.auto.Estimators",".","Parameters","--","--","--","--","--","config",":","dict","Config","in","nested","dict",".","logger",":","logging.Logger","Optional","logger","for","this","estimator",",","can","be","`","None","`","when","default","setting","is","used",".","reporter",":","callable","The","reporter","for","metric","checkpointing",".","name",":","str","Optional","name","for","the","estimator",".","Attributes","--","--","--","--","--","_logger",":","logging.Logger","The","customized\/default","logger","for","this","estimator",".","_logdir",":","str","The","temporary","dir","for","logs",".","_cfg",":","autocfg.dataclass","The","configurations","."]
code: def __init__(self, config, logger=None, reporter=None, name=None):
      self._reporter = reporter
      name = name if isinstance(name, str) else self.__class__.__name__
      self._name = name
      self._logger = (
          logger if logger is not None else logging.getLogger(name)
      )
      self._logger.setLevel(logging.INFO)
  
      # reserved attributes
      self.net = None
      self.num_class = None
      self.classes = []
      self.ctx = [None]
      self.dataset = "auto"
  
      # logdir
      logdir = (
          config.pop("log_dir", None)
          if isinstance(config, dict)
          else None
      )
      if logdir:
          self._logdir = os.path.abspath(logdir)
      else:
          self._logdir = os.path.join(
              os.getcwd(),
              name.lower() + datetime.now().strftime("-%m-%d-%Y"),
          )
  
      # finalize config
      cfg = self._default_cfg.merge(
          config
      )  # config can be dict or yaml file
      diffs = self._default_cfg.diff(cfg)
      if diffs:
          self._logger.info("modified configs(<old> != <new>): {")
          for diff in diffs:
              self._logger.info(diff)
          self._logger.info("}")
      self._cfg = cfg
  
      os.makedirs(self._logdir, exist_ok=True)
      config_file = os.path.join(self._logdir, "config.yaml")
      # log file
      self._log_file = os.path.join(self._logdir, "estimator.log")
      fh = logging.FileHandler(self._log_file)
      self._logger.addHandler(fh)
      # save_config(r.config, self._logger, config_file)
      self._cfg.save(config_file)
      self._logger.info("Saved config to %s", config_file)
  
      # freeze config
      self._cfg.freeze()
      seed = self._cfg.get("seed", np.random.randint(1000000))
      _random.seed(seed)
  
imports: import os
  import math
  import pickle
  import io
  import logging
  from datetime import datetime
  import numpy
  import pandas
  from ...utils import random
  from ...utils.filesystem import temporary_filename
  from .utils import _suggest_load_context
label_desc: Use image node_id 1 to create a new BaseEstimator object  with example: obj = BaseEstimator(config, logger, reporter, name)