class_docstr: base class for classfication 
code: def create_estimator(self):
      # Set model params
      model_params = HParams()
  
      # create model func
      model_fn = self.model_fn()
  
      # multi-gpus
      devices, num_gpu = utils.gpu_device_names()
      distribution = utils.get_distribution_strategy(num_gpu)
      logging.info(
          "Device: num = {}, list = {}".format(num_gpu, devices)
      )
  
      # run config
      tfconf = self.config["solver"]["run_config"]
      saverconf = self.config["solver"]["saver"]
      session_config = tf.ConfigProto(
          allow_soft_placement=tfconf["allow_soft_placement"],
          log_device_placement=tfconf["log_device_placement"],
          intra_op_parallelism_threads=tfconf[
              "intra_op_parallelism_threads"
          ],
          inter_op_parallelism_threads=tfconf[
              "inter_op_parallelism_threads"
          ],
          gpu_options=tf.GPUOptions(
              allow_growth=tfconf["allow_growth"]
          ),
      )
  
      run_config = tf.estimator.RunConfig(  # pylint: disable=no-member
          tf_random_seed=tfconf["tf_random_seed"],
          session_config=session_config,
          save_summary_steps=saverconf["save_summary_steps"],
          keep_checkpoint_max=saverconf["max_to_keep"],
          log_step_count_steps=tfconf["log_step_count_steps"],
          train_distribute=distribution,
          device_fn=None,
          protocol=None,
          eval_distribute=None,
          experimental_distribute=None,
      )
  
      # Instantiate Estimator
      nn = tf.estimator.Estimator(  # pylint: disable=no-member,invalid-name
          model_fn=model_fn,
          model_dir=saverconf["model_path"],
          config=run_config,
          params=model_params,
          warm_start_from=None,
      )
      return nn
  
imports: import os
  import re
  import functools
  import collections
  from absl import logging
  import delta.compat
  from tensorflow.python import debug
  from tensorflow.python.estimator.canned import metric_keys
  from tensorboard.plugins.pr_curve import summary
  from delta import utils
  from delta.utils.hparam import HParams
  from delta.utils import metrics
  from delta.utils import summary
  from delta.utils.register import registers
  from delta.utils.solver.base_solver import ABCEstimatorSolver
label_desc: Use image node_id 8 for calling the EstimatorSolver obj's underlying member method code with example usage: obj.create_estimator() and returns: nn