def session_end_pb(status, end_time_secs=None): """Constructs a SessionEndInfo protobuffer. Creates a summary that contains status information for a completed training session. Should be exported after the training session is completed. One such summary per training session should be created. Each should have a different run. Args: status: A tensorboard.hparams.Status enumeration value denoting the status of the session. end_time_secs: float. The time to use as the session end time. Represented as seconds since the unix epoch. If None uses the current time. Returns: The summary protobuffer mentioned above. """ if end_time_secs is None: end_time_secs = time.time() session_end_info = plugin_data_pb2.SessionEndInfo( status=status, end_time_secs=end_time_secs) return _summary( metadata.SESSION_END_INFO_TAG, plugin_data_pb2.HParamsPluginData(session_end_info=session_end_info), )
def test_session_end_pb(self): end_time_secs = 1234.0 self.assertEqual( summary.session_end_pb(api_pb2.STATUS_SUCCESS, end_time_secs), tf.compat.v1.Summary( value=[ tf.compat.v1.Summary.Value( tag="_hparams_/session_end_info", tensor=summary._TF_NULL_TENSOR, metadata=tf.compat.v1.SummaryMetadata( plugin_data=tf.compat.v1.SummaryMetadata.PluginData( plugin_name="hparams", content=( plugin_data_pb2.HParamsPluginData( version=0, session_end_info=( plugin_data_pb2.SessionEndInfo( status=api_pb2.STATUS_SUCCESS, end_time_secs=end_time_secs, ) ), ).SerializeToString() ), ) ), ) ] ), )
def session_end_pb(status): """Creates a summary that contains status information for a completed training session. Should be exported after the training session is completed. One such summary per training session should be created. Each should have a different run. Arguments: status: A tensorboard.hparams.Status enumeration value denoting the status of the session. Returns: Returns the summary protobuffer mentioned above. """ session_end_info = plugin_data_pb2.SessionEndInfo(status=status) return _summary(metadata.SESSION_END_INFO_TAG, plugin_data_pb2.HParamsPluginData( session_end_info=session_end_info))
def test_eager(self): def mock_time(): mock_time.time += 1 return mock_time.time mock_time.time = 1556227801.875 initial_time = mock_time.time with mock.patch("time.time", mock_time): self._initialize_model(writer=self.logdir) self.model.fit(x=[(1,)], y=[(2,)], callbacks=[self.callback]) final_time = mock_time.time files = os.listdir(self.logdir) self.assertEqual(len(files), 1, files) events_file = os.path.join(self.logdir, files[0]) plugin_data = [] for event in tf.compat.v1.train.summary_iterator(events_file): if event.WhichOneof("what") != "summary": continue self.assertEqual(len(event.summary.value), 1, event.summary.value) value = event.summary.value[0] self.assertEqual( value.metadata.plugin_data.plugin_name, metadata.PLUGIN_NAME, ) plugin_data.append(value.metadata.plugin_data.content) self.assertEqual(len(plugin_data), 2, plugin_data) (start_plugin_data, end_plugin_data) = plugin_data start_pb = metadata.parse_session_start_info_plugin_data(start_plugin_data) end_pb = metadata.parse_session_end_info_plugin_data(end_plugin_data) # We're not the only callers of `time.time`; Keras calls it # internally an unspecified number of times, so we're not guaranteed # to know the exact values. Instead, we perform relative checks... self.assertGreater(start_pb.start_time_secs, initial_time) self.assertLess(start_pb.start_time_secs, end_pb.end_time_secs) self.assertLessEqual(start_pb.start_time_secs, final_time) # ...and then stub out the times for proto equality checks below. start_pb.start_time_secs = 1234.5 end_pb.end_time_secs = 6789.0 expected_start_pb = plugin_data_pb2.SessionStartInfo() text_format.Merge( """ start_time_secs: 1234.5 group_name: "my_trial" hparams { key: "optimizer" value { string_value: "adam" } } hparams { key: "dense_neurons" value { number_value: 8.0 } } """, expected_start_pb, ) self.assertEqual(start_pb, expected_start_pb) expected_end_pb = plugin_data_pb2.SessionEndInfo() text_format.Merge( """ end_time_secs: 6789.0 status: STATUS_SUCCESS """, expected_end_pb, ) self.assertEqual(end_pb, expected_end_pb)