docs: def run_loop(name, train_input_fn, eval_input_fn, model_column_fn,
               build_estimator_fn, flags_obj, tensors_to_log, early_stop=False):
    """Define training loop."""
    model_helpers.apply_clean(flags.FLAGS)
    model = build_estimator_fn(
        model_dir=flags_obj.model_dir, model_type=flags_obj.model_type,
        model_column_fn=model_column_fn,
        inter_op=flags_obj.inter_op_parallelism_threads,
        intra_op=flags_obj.intra_op_parallelism_threads)
  
    run_params = {
        'batch_size': flags_obj.batch_size,
        'train_epochs': flags_obj.train_epochs,
        'model_type': flags_obj.model_type,
    }
  
    benchmark_logger = logger.get_benchmark_logger()
    benchmark_logger.log_run_info('wide_deep', name, run_params,
                                  test_id=flags_obj.benchmark_test_id)
  
    loss_prefix = LOSS_PREFIX.get(flags_obj.model_type, '')
    tensors_to_log = {k: v.format(loss_prefix=loss_prefix)
                      for k, v in tensors_to_log.items()}
    train_hooks = hooks_helper.get_train_hooks(
        flags_obj.hooks, model_dir=flags_obj.model_dir,
        batch_size=flags_obj.batch_size, tensors_to_log=tensors_to_log)
  
    # Train and evaluate the model every `flags.epochs_between_evals` epochs.
    for n in range(flags_obj.train_epochs // flags_obj.epochs_between_evals):
      model.train(input_fn=train_input_fn, hooks=train_hooks)
  
      results = model.evaluate(input_fn=eval_input_fn)
  
      # Display evaluation metrics
      tf.logging.info('Results at epoch %d / %d',
                      (n + 1) * flags_obj.epochs_between_evals,
                      flags_obj.train_epochs)
      tf.logging.info('-' * 60)
  
      for key in sorted(results):
        tf.logging.info('%s: %s' % (key, results[key]))
  
      benchmark_logger.log_evaluation_result(results)
  
      if early_stop and model_helpers.past_stop_threshold(
          flags_obj.stop_threshold, results['accuracy']):
        break
  
    # Export the model
    if flags_obj.export_dir is not None:
      export_model(model, flags_obj.model_type, flags_obj.export_dir,
                   model_column_fn)