code: def _call_model_fn(self, features, labels, mode, config):
      from tensorflow.python.util import function_utils
  
      model_fn_args = function_utils.fn_args(self._model_fn)
      kwargs = {}
      if "labels" in model_fn_args:
          kwargs["labels"] = labels
      if "mode" in model_fn_args:
          kwargs["mode"] = mode
      if "params" in model_fn_args:
          kwargs["params"] = self.params
      if "config" in model_fn_args:
          kwargs["config"] = config
  
      model_fn_results = self._model_fn(features=features, **kwargs)
  
      return model_fn_results
  
file_path: BigDL/python/orca/src/bigdl/orca/tfpark/estimator.py
imports: from bigdl.dllib.optim.optimizer import MaxIteration, Loss, TreeNNAccuracy
  from bigdl.orca.tfpark.utils import evaluate_string_metrics
  from bigdl.dllib.keras import metrics
  from bigdl.orca.tfpark.tfnet import TFNet
  from bigdl.orca.tfpark.tf_optimizer import TFOptimizer
  from bigdl.orca.tfpark.tf_dataset import TFDataset
  from bigdl.dllib.utils import nest
  import six
  import os
  from bigdl.dllib.utils.log4Error import *
label_desc: Use image node_id 3 for calling the TFEstimator obj's underlying member method code with example usage: obj._call_model_fn(features, labels, mode, config) and returns: model_fn_results