Improve support for tensorboard.summarywriter.addscalars binding

This commit is contained in:
allegroai 2020-02-18 11:21:47 +02:00
parent f5f13658c3
commit edc237dad4
4 changed files with 33 additions and 11 deletions

View File

@ -43,8 +43,8 @@ sdk {
subsampling: 0 subsampling: 0
} }
# Support plot-per-graph fully matching Tensorboard behavior (i.e. if this is set to False, each series should have its own graph) # Support plot-per-graph fully matching Tensorboard behavior (i.e. if this is set to True, each series should have its own graph)
tensorboard_auto_group_scalars: True tensorboard_single_series_per_graph: False
} }
network { network {

View File

@ -271,14 +271,17 @@ class EventTrainsWriter(object):
def _add_scalar(self, tag, step, scalar_data): def _add_scalar(self, tag, step, scalar_data):
default_title = tag if not self._logger._get_tensorboard_auto_group_scalars() else 'Scalars' default_title = tag if not self._logger._get_tensorboard_auto_group_scalars() else 'Scalars'
title, series = self.tag_splitter(tag, num_split_parts=1, title, series = self.tag_splitter(
default_title=default_title, logdir_header='series_last') tag, num_split_parts=1, default_title=default_title, logdir_header='series_last'
)
step = self._fix_step_counter(title, series, step) step = self._fix_step_counter(title, series, step)
tag = self._get_add_scalars_event_tag(default_title) tag = self._get_add_scalars_event_tag(default_title)
group = config.get('metrics.tensorboard_auto_group_scalars', True)
possible_title = None if group else tag series_per_graph = self._logger._get_tensorboard_single_series_per_graph()
possible_tag = tag if group else None
possible_title = tag if series_per_graph else None
possible_tag = None if series_per_graph else tag
title = title + possible_title if possible_title else title title = title + possible_title if possible_title else title
series = possible_tag or series series = possible_tag or series
@ -1096,6 +1099,7 @@ class PatchTensorFlowEager(object):
img_data_np=img_data_np, img_data_np=img_data_np,
max_keep_images=kwargs.get('max_images')) max_keep_images=kwargs.get('max_images'))
class PatchKerasModelIO(object): class PatchKerasModelIO(object):
__main_task = None __main_task = None
__patched_keras = None __patched_keras = None

View File

@ -32,8 +32,9 @@
quality: 87 quality: 87
subsampling: 0 subsampling: 0
} }
# Support plot-per-graph fully matching Tensorboard behavior (i.e. if this is set to False, each series should have its own graph)
tensorboard_auto_group_scalars: True # Support plot-per-graph fully matching Tensorboard behavior (i.e. if this is set to True, each series should have its own graph)
tensorboard_single_series_per_graph: False
} }
network { network {

View File

@ -11,7 +11,7 @@ from .backend_interface.task import Task as _Task
from .backend_interface.task.development.worker import DevWorker from .backend_interface.task.development.worker import DevWorker
from .backend_interface.task.log import TaskHandler from .backend_interface.task.log import TaskHandler
from .backend_interface.util import mutually_exclusive from .backend_interface.util import mutually_exclusive
from .config import running_remotely, get_cache_dir from .config import running_remotely, get_cache_dir, config
from .debugging.log import LoggerRoot from .debugging.log import LoggerRoot
from .errors import UsageError from .errors import UsageError
from .storage import StorageHelper from .storage import StorageHelper
@ -31,6 +31,7 @@ class Logger(object):
""" """
SeriesInfo = SeriesInfo SeriesInfo = SeriesInfo
_tensorboard_logging_auto_group_scalars = False _tensorboard_logging_auto_group_scalars = False
_tensorboard_single_series_per_graph = config.get('metrics.tensorboard_single_series_per_graph', False)
def __init__(self, private_task): def __init__(self, private_task):
""" """
@ -518,6 +519,14 @@ class Logger(object):
""" """
cls._tensorboard_logging_auto_group_scalars = group_scalars cls._tensorboard_logging_auto_group_scalars = group_scalars
@classmethod
def tensorboard_single_series_per_graph(cls, single_series=False):
"""
If `single_series` set to True, we generate a separate graph (plot) for each Tensorboard scalar series
Default is False: Tensorboard scalar series will be grouped according to their title
"""
cls._tensorboard_logging_single_series_per_graphs = single_series
@classmethod @classmethod
def _remove_std_logger(cls): def _remove_std_logger(cls):
StdStreamPatch.remove_std_logger() StdStreamPatch.remove_std_logger()
@ -568,7 +577,7 @@ class Logger(object):
self._start_task_if_needed() self._start_task_if_needed()
def _report_image_plot_and_upload(self, title, series, iteration, path=None, matrix=None, max_image_history=None, def _report_image_plot_and_upload(self, title, series, iteration, path=None, matrix=None, max_image_history=None,
delete_after_upload=False): delete_after_upload=False):
""" """
Report an image, upload its contents, and present in plots section using plotly Report an image, upload its contents, and present in plots section using plotly
@ -691,3 +700,11 @@ class Logger(object):
default is False: Tensorboard scalars without title will have title/series with the same tag default is False: Tensorboard scalars without title will have title/series with the same tag
""" """
return cls._tensorboard_logging_auto_group_scalars return cls._tensorboard_logging_auto_group_scalars
@classmethod
def _get_tensorboard_single_series_per_graph(cls):
"""
:return: return True if we generate a separate graph (plot) for each Tensorboard scalar series
default is False: Tensorboard scalar series will be grouped according to their title
"""
return cls._tensorboard_single_series_per_graph