class_docstr: BatchProcessor Class for plug and play fit_batch & evaluate_batch
  
  During training or validation, data are divided into minibatches for processing. This
  class aims at providing hooks of training or validating on a minibatch of data. Users
  may provide customized fit_batch() and evaluate_batch() methods by inheriting from
  this class and overriding class methods.
  
  :py:class:`BatchProcessor` can be used to replace fit_batch() and evaluate_batch()
  in the base estimator class
docstr: Evaluate the estimator model on a batch of validation data.
  
  Parameters
  ----------
  estimator : Estimator
      Reference to the estimator
  val_batch : tuple
      Data and label of a batch from the validation data loader.
  batch_axis : int, default 0
      Batch axis to split the validation data into devices.
code: def evaluate_batch(self, estimator, val_batch, batch_axis=0):
      """Evaluate the estimator model on a batch of validation data.
  
      Parameters
      ----------
      estimator : Estimator
          Reference to the estimator
      val_batch : tuple
          Data and label of a batch from the validation data loader.
      batch_axis : int, default 0
          Batch axis to split the validation data into devices.
      """
      data, label = self._get_data_and_label(
          val_batch, estimator.device, batch_axis
      )
      pred = [estimator.val_net(x) for x in data]
      loss = [
          estimator.val_loss(y_hat, y) for y_hat, y in zip(pred, label)
      ]
  
      return data, label, pred, loss
  
file_path: mxnet/python/mxnet/gluon/contrib/estimator/batch_processor.py
imports: from ...utils import split_and_load
  from ....None import autograd
  from ....None import npx
label_desc: Use image node_id 3 for calling the BatchProcessor obj's underlying member method code with example usage: obj.evaluate_batch(estimator, val_batch, batch_axis) and returns: data,  label,  pred,  loss