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