code: def _external_eval(
      model,
      global_step,
      sess,
      hparams,
      iterator,
      iterator_feed_dict,
      tgt_file,
      label,
      summary_writer,
      save_on_best,
      avg_ckpts=False,
  ):
      """External evaluation such as BLEU and ROUGE scores."""
      out_dir = hparams.out_dir
      decode = global_step > 0
  
      if avg_ckpts:
          label = "avg_" + label
  
      if decode:
          utils.print_out(
              "# External evaluation, global step %d" % global_step
          )
  
      sess.run(iterator.initializer, feed_dict=iterator_feed_dict)
  
      output = os.path.join(out_dir, "output_%s" % label)
      scores = nmt_utils.decode_and_evaluate(
          label,
          model,
          sess,
          output,
          ref_file=tgt_file,
          metrics=hparams.metrics,
          subword_option=hparams.subword_option,
          beam_width=hparams.beam_width,
          tgt_eos=hparams.eos,
          decode=decode,
          infer_mode=hparams.infer_mode,
      )
      # Save on best metrics
      if decode:
          for metric in hparams.metrics:
              if avg_ckpts:
                  best_metric_label = "avg_best_" + metric
              else:
                  best_metric_label = "best_" + metric
  
              utils.add_summary(
                  summary_writer,
                  global_step,
                  "%s_%s" % (label, metric),
                  scores[metric],
              )
              # metric: larger is better
              if save_on_best and scores[metric] > getattr(
                  hparams, best_metric_label
              ):
                  setattr(hparams, best_metric_label, scores[metric])
                  model.saver.save(
                      sess,
                      os.path.join(
                          getattr(hparams, best_metric_label + "_dir"),
                          "translate.ckpt",
                      ),
                      global_step=model.global_step,
                  )
          utils.save_hparams(out_dir, hparams)
      return scores
  
imports: from __future__ import print_function
  import math
  import os
  import random
  import time
  import tensorflow
  from .None import inference, gnmt_model
  from .gnmt import attention_model, model
  from .gnmt import model_helper
  from .gnmt.utils import nmt_utils, misc_utils
label_desc: Use image node_id 19 for calling a global function with example usage: _external_eval(model, global_step, sess, hparams, iterator, iterator_feed_dict, tgt_file, label, summary_writer, save_on_best, avg_ckpts) and returns: scores