docs: def evaluate(self, num_eval_batches=None):
      """Run one round of evaluation, return loss and accuracy."""
  
      num_eval_batches = num_eval_batches or self.num_eval_batches
      with tf.Graph().as_default() as graph:
        self.tensors = self.model.build_eval_graph(self.eval_data_paths,
                                                   self.batch_size)
        self.summary = tf.summary.merge_all()
        self.saver = tf.train.Saver()
  
      self.summary_writer = tf.summary.FileWriter(self.output_path)
      self.sv = tf.train.Supervisor(
          graph=graph,
          logdir=self.output_path,
          summary_op=None,
          global_step=None,
          saver=self.saver)
  
      last_checkpoint = tf.train.latest_checkpoint(self.checkpoint_path)
      with self.sv.managed_session(master='', start_standard_services=False) as session:
        self.sv.saver.restore(session, last_checkpoint)
  
        if not self.batch_of_examples:
          self.sv.start_queue_runners(session)
          for i in range(num_eval_batches):
            self.batch_of_examples.append(session.run(self.tensors.examples))
  
        for i in range(num_eval_batches):
          session.run(self.tensors.metric_updates,
                      {self.tensors.examples: self.batch_of_examples[i]})
  
        metric_values = session.run(self.tensors.metric_values)
        global_step = tf.train.global_step(session, self.tensors.global_step)
        summary = session.run(self.summary)
        self.summary_writer.add_summary(summary, global_step)
        self.summary_writer.flush()
        return metric_values