def _eval_batches()

in tensorflow_fold/blocks/plan.py [0:0]


  def _eval_batches(self, supervisor, session, batches, step, is_dev=False):
    """Runs a batchwise eval.

    Args:
      supervisor: A TF supervisor.
      session: A TF session.
      batches: An iterable of (batch_size, feed_dict) pairs.
      step: The current global step. Used for computing summaries.
      is_dev: Whether or not we are running on the dev set. If so we never
        compute summaries (because they would overwrite summaries from the
        training set).

    Returns:
      A (size, loss_total, metrics) tuple.

    Raises:
      ValueError: if batches is empty.
    """
    compute_summaries = self.compute_summaries and not is_dev
    size = 0
    metrics = collections.OrderedDict.fromkeys(self.metrics, 0.0)
    loss = 0.0
    fetches = {'metrics': self.metrics, 'loss': self.loss_total}
    if compute_summaries:
      fetches['summaries'] = self.summaries
      summary_pb = tf.Summary()
      tag_value = {}
    for batch_size, feed_dict in batches:
      size += batch_size
      if compute_summaries:
        feed_dict[self.batch_size_placeholder] = batch_size
      results = session.run(fetches, feed_dict)
      for name, value in six.iteritems(results['metrics']):
        metrics[name] += value * batch_size
      loss += results['loss']
      if compute_summaries:
        for value in tf.Summary.FromString(results['summaries']).value:
          if value.HasField('simple_value'):
            if value.tag not in tag_value:
              tag_value[value.tag] = summary_pb.value.add(tag=value.tag)
            tag_value[value.tag].simple_value += value.simple_value * batch_size
    if size == 0:
      raise ValueError('dev_examples must be non-empty' if is_dev else
                       'examples must be non-empty')
    for name in six.iterkeys(metrics):
      metrics[name] /= size
    if compute_summaries:
      for name in six.iterkeys(tag_value):
        tag_value[name].simple_value /= size
      supervisor.SummaryComputed(session, summary_pb, global_step=step)
    return size, loss, metrics