diff options
author | Justine Tunney <jart@google.com> | 2017-11-28 19:07:56 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-11-28 19:11:39 -0800 |
commit | 60d2e51254028df73f650abe07fad024c49688bb (patch) | |
tree | eb34e43a94d4425edc31921f12efbbe725827f0e /tensorflow/contrib/summary | |
parent | bf05a2d1dce3af9b88dcd5c9253a163353951c99 (diff) |
Introduce tf.contrib.summary.flush
This op has been useful while writing benchmarks.
PiperOrigin-RevId: 177254316
Diffstat (limited to 'tensorflow/contrib/summary')
-rw-r--r-- | tensorflow/contrib/summary/summary.py | 1 | ||||
-rw-r--r-- | tensorflow/contrib/summary/summary_ops.py | 21 | ||||
-rw-r--r-- | tensorflow/contrib/summary/summary_ops_test.py | 27 |
3 files changed, 49 insertions, 0 deletions
diff --git a/tensorflow/contrib/summary/summary.py b/tensorflow/contrib/summary/summary.py index f783179f61..9e6af5232f 100644 --- a/tensorflow/contrib/summary/summary.py +++ b/tensorflow/contrib/summary/summary.py @@ -31,6 +31,7 @@ from tensorflow.contrib.summary.summary_ops import audio from tensorflow.contrib.summary.summary_ops import create_summary_db_writer from tensorflow.contrib.summary.summary_ops import create_summary_file_writer from tensorflow.contrib.summary.summary_ops import eval_dir +from tensorflow.contrib.summary.summary_ops import flush from tensorflow.contrib.summary.summary_ops import generic from tensorflow.contrib.summary.summary_ops import graph from tensorflow.contrib.summary.summary_ops import histogram diff --git a/tensorflow/contrib/summary/summary_ops.py b/tensorflow/contrib/summary/summary_ops.py index 8e37987cb7..de6f2cd79f 100644 --- a/tensorflow/contrib/summary/summary_ops.py +++ b/tensorflow/contrib/summary/summary_ops.py @@ -516,6 +516,27 @@ def import_event(tensor, name=None): context.context().summary_writer_resource, tensor, name=name) +def flush(writer=None, name=None): + """Forces summary writer to send any buffered data to storage. + + This operation blocks until that finishes. + + Args: + writer: The @{tf.contrib.summary.SummaryWriter} resource to flush. + The thread default will be used if this parameter is None. + Otherwise a @{tf.no_op} is returned. + name: A name for the operation (optional). + + Returns: + The created @{tf.Operation}. + """ + if writer is None: + writer = context.context().summary_writer_resource + if writer is None: + return control_flow_ops.no_op() + return gen_summary_ops.flush_summary_writer(writer, name=name) + + def eval_dir(model_dir, name=None): """Construct a logdir for an eval summary writer.""" return os.path.join(model_dir, "eval" if not name else "eval_" + name) diff --git a/tensorflow/contrib/summary/summary_ops_test.py b/tensorflow/contrib/summary/summary_ops_test.py index ad89c0c36a..3fe421a7e9 100644 --- a/tensorflow/contrib/summary/summary_ops_test.py +++ b/tensorflow/contrib/summary/summary_ops_test.py @@ -109,6 +109,33 @@ class TargetTest(test_util.TensorFlowTestCase): self.assertEqual(len(events), 2) self.assertEqual(events[1].summary.value[0].tag, 'scalar') + def testMaxQueue(self): + logs = tempfile.mkdtemp() + with summary_ops.create_summary_file_writer( + logs, max_queue=2, flush_millis=999999, + name='lol').as_default(), summary_ops.always_record_summaries(): + get_total = lambda: len(summary_test_util.events_from_logdir(logs)) + # Note: First tf.Event is always file_version. + self.assertEqual(1, get_total()) + summary_ops.scalar('scalar', 2.0, step=1) + self.assertEqual(1, get_total()) + summary_ops.scalar('scalar', 2.0, step=2) + self.assertEqual(3, get_total()) + + def testFlush(self): + logs = tempfile.mkdtemp() + with summary_ops.create_summary_file_writer( + logs, max_queue=999999, flush_millis=999999, + name='lol').as_default(), summary_ops.always_record_summaries(): + get_total = lambda: len(summary_test_util.events_from_logdir(logs)) + # Note: First tf.Event is always file_version. + self.assertEqual(1, get_total()) + summary_ops.scalar('scalar', 2.0, step=1) + summary_ops.scalar('scalar', 2.0, step=2) + self.assertEqual(1, get_total()) + summary_ops.flush() + self.assertEqual(3, get_total()) + class DbTest(summary_test_internal.SummaryDbTest): |