From fdbe1efe543f8236630e9ec064dfdfa22944b349 Mon Sep 17 00:00:00 2001 From: Riley Jones Date: Thu, 18 May 2023 00:00:14 +0000 Subject: [PATCH 1/2] update hparams plugin to generate domains for boolean hparams --- .../plugins/hparams/backend_context.py | 4 ++ .../plugins/hparams/backend_context_test.py | 57 +++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/tensorboard/plugins/hparams/backend_context.py b/tensorboard/plugins/hparams/backend_context.py index dca3183dfe..c8414002b4 100644 --- a/tensorboard/plugins/hparams/backend_context.py +++ b/tensorboard/plugins/hparams/backend_context.py @@ -311,6 +311,10 @@ def _compute_hparam_info_from_values(self, name, values): ): result.domain_discrete.extend(distinct_values) + # If the result is a boolean, domain should be True and False + if result.type == api_pb2.DATA_TYPE_BOOL: + result.domain_discrete.extend([True, False]) + return result def _experiment_from_data_provider_hparams( diff --git a/tensorboard/plugins/hparams/backend_context_test.py b/tensorboard/plugins/hparams/backend_context_test.py index 17ced879d8..eb0544b1a0 100644 --- a/tensorboard/plugins/hparams/backend_context_test.py +++ b/tensorboard/plugins/hparams/backend_context_test.py @@ -80,9 +80,9 @@ def _mock_list_tensors( }, } result = {} - for (run, tag_to_content) in hparams_content.items(): + for run, tag_to_content in hparams_content.items(): result.setdefault(run, {}) - for (tag, content) in tag_to_content.items(): + for tag, content in tag_to_content.items(): t = provider.TensorTimeSeries( max_step=0, max_wall_time=0, @@ -131,9 +131,9 @@ def _mock_list_scalars( }, } result = {} - for (run, tag_to_content) in scalars_content.items(): + for run, tag_to_content in scalars_content.items(): result.setdefault(run, {}) - for (tag, content) in tag_to_content.items(): + for tag, content in tag_to_content.items(): t = provider.ScalarTimeSeries( max_step=0, max_wall_time=0, @@ -358,6 +358,55 @@ def test_experiment_without_experiment_tag_many_distinct_values(self): _canonicalize_experiment(actual_exp) self.assertProtoEquals(expected_exp, actual_exp) + def test_experiment_with_bool_types(self): + self.session_1_start_info_ = """ + hparams:[ + {key: 'batch_size' value: {bool_value: true}} + ] + """ + self.session_2_start_info_ = """ + hparams:[ + {key: 'batch_size' value: {bool_value: false}} + ] + """ + self.session_3_start_info_ = """ + hparams:[ + ] + """ + expected_exp = """ + hparam_infos: { + name: 'batch_size' + type: DATA_TYPE_BOOL + domain_discrete: { + values: [{bool_value: true}, {bool_value: false}] + } + } + metric_infos: { + name: {group: '', tag: 'accuracy'} + } + metric_infos: { + name: {group: '', tag: 'loss'} + } + metric_infos: { + name: {group: 'eval', tag: 'loss'} + } + metric_infos: { + name: {group: 'train', tag: 'loss'} + } + """ + ctxt = backend_context.Context( + self._mock_tb_context, max_domain_discrete_len=1 + ) + request_ctx = context.RequestContext() + actual_exp = ctxt.experiment_from_metadata( + request_ctx, + "123", + ctxt.hparams_metadata(request_ctx, "123"), + ctxt.hparams_from_data_provider(request_ctx, "123"), + ) + _canonicalize_experiment(actual_exp) + self.assertProtoEquals(expected_exp, actual_exp) + def test_experiment_without_any_hparams(self): request_ctx = context.RequestContext() actual_exp = self._experiment_from_metadata() From 7c9eb9f095945fe0dee5c6679a441433df7df14a Mon Sep 17 00:00:00 2001 From: Riley Jones Date: Thu, 18 May 2023 21:28:08 +0000 Subject: [PATCH 2/2] start using _experiment_from_metadata --- tensorboard/plugins/hparams/backend_context.py | 1 - tensorboard/plugins/hparams/backend_context_test.py | 13 ++----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/tensorboard/plugins/hparams/backend_context.py b/tensorboard/plugins/hparams/backend_context.py index c8414002b4..29127ea16b 100644 --- a/tensorboard/plugins/hparams/backend_context.py +++ b/tensorboard/plugins/hparams/backend_context.py @@ -311,7 +311,6 @@ def _compute_hparam_info_from_values(self, name, values): ): result.domain_discrete.extend(distinct_values) - # If the result is a boolean, domain should be True and False if result.type == api_pb2.DATA_TYPE_BOOL: result.domain_discrete.extend([True, False]) diff --git a/tensorboard/plugins/hparams/backend_context_test.py b/tensorboard/plugins/hparams/backend_context_test.py index eb0544b1a0..707014a29f 100644 --- a/tensorboard/plugins/hparams/backend_context_test.py +++ b/tensorboard/plugins/hparams/backend_context_test.py @@ -366,7 +366,7 @@ def test_experiment_with_bool_types(self): """ self.session_2_start_info_ = """ hparams:[ - {key: 'batch_size' value: {bool_value: false}} + {key: 'batch_size' value: {bool_value: true}} ] """ self.session_3_start_info_ = """ @@ -394,16 +394,7 @@ def test_experiment_with_bool_types(self): name: {group: 'train', tag: 'loss'} } """ - ctxt = backend_context.Context( - self._mock_tb_context, max_domain_discrete_len=1 - ) - request_ctx = context.RequestContext() - actual_exp = ctxt.experiment_from_metadata( - request_ctx, - "123", - ctxt.hparams_metadata(request_ctx, "123"), - ctxt.hparams_from_data_provider(request_ctx, "123"), - ) + actual_exp = self._experiment_from_metadata() _canonicalize_experiment(actual_exp) self.assertProtoEquals(expected_exp, actual_exp)