def image(tag, tensor, rescale=1, dataformats="CHW"): """Outputs a `Summary` protocol buffer with images. The summary has up to `max_images` summary values containing images. The images are built from `tensor` which must be 3-D with shape `[height, width, channels]` and where `channels` can be: * 1: `tensor` is interpreted as Grayscale. * 3: `tensor` is interpreted as RGB. * 4: `tensor` is interpreted as RGBA. Args: tag: A name for the generated node. Will also serve as a series name in TensorBoard. tensor: A 3-D `uint8` or `float32` `Tensor` of shape `[height, width, channels]` where `channels` is 1, 3, or 4. 'tensor' can either have values in [0, 1] (float32) or [0, 255] (uint8). The image() function will scale the image values to [0, 255] by applying a scale factor of either 1 (uint8) or 255 (float32). Returns: A scalar `Tensor` of type `string`. The serialized `Summary` protocol buffer. """ tag = tbxsummary._clean_tag(tag) tensor = tbxmake_np(tensor) tensor = convert_to_HWC(tensor, dataformats) # Do not assume that user passes in values in [0, 255], use data type to detect if tensor.dtype != np.uint8: tensor = (tensor * 255.0).astype(np.uint8) image = tbxsummary.make_image(tensor, rescale=rescale) return TBXSummary(value=[TBXSummary.Value(tag=tag, image=image)])
def make_session_end_summary(status: str, end_time_secs: Optional[int] = None): """ Args: status: outcome of this run, one of of 'UNKNOWN', 'SUCCESS', 'FAILURE', 'RUNNING' end_time_secs: optional ending time in seconds Returns: """ status = Status.DESCRIPTOR.values_by_name[ f"STATUS_{status.upper()}"].number if end_time_secs is None: import time end_time_secs = int(time.time()) session_end_summary = SessionEndInfo(status=status, end_time_secs=end_time_secs) session_end_content = HParamsPluginData( session_end_info=session_end_summary, version=PLUGIN_DATA_VERSION) session_end_summary_metadata = SummaryMetadata( plugin_data=SummaryMetadata.PluginData( plugin_name=PLUGIN_NAME, content=session_end_content.SerializeToString())) session_end_summary = Summary(value=[ Summary.Value(tag=SESSION_END_INFO_TAG, metadata=session_end_summary_metadata) ]) return session_end_summary
def make_session_start_summary( hparam_values, group_name: Optional[str] = None, start_time_secs: Optional[int] = None, ): """Assign values to the hyperparameters in the context of this session. Args: hparam_values: a dict of ``hp_name`` -> ``hp_value`` mappings group_name: optional group name for this session start_time_secs: optional starting time in seconds Returns: """ if start_time_secs is None: import time start_time_secs = int(time.time()) session_start_info = SessionStartInfo(group_name=group_name, start_time_secs=start_time_secs) for hp_name, hp_value in hparam_values.items(): # Logging a None would raise an exception when setting session_start_info.hparams[hp_name].number_value = None. # Logging a float.nan instead would work, but that run would not show at all in the tensorboard hparam plugin. # The best thing to do here is to skip that value, it will show as a blank cell in the table view of the # tensorboard plugin. However, that run would not be shown in the parallel coord or in the scatter plot view. if hp_value is None: loguru.warning( f"Hyper parameter {hp_name} is `None`: the tensorboard hp plugin " f"will show this run in table view, but not in parallel coordinates " f"view or in scatter plot matrix view") continue if isinstance(hp_value, string_types): session_start_info.hparams[hp_name].string_value = hp_value continue if isinstance(hp_value, bool): session_start_info.hparams[hp_name].bool_value = hp_value continue if not isinstance(hp_value, (int, float)): hp_value = make_np(hp_value)[0] session_start_info.hparams[hp_name].number_value = hp_value session_start_content = HParamsPluginData( session_start_info=session_start_info, version=PLUGIN_DATA_VERSION) session_start_summary_metadata = SummaryMetadata( plugin_data=SummaryMetadata.PluginData( plugin_name=PLUGIN_NAME, content=session_start_content.SerializeToString())) session_start_summary = Summary(value=[ Summary.Value(tag=SESSION_START_INFO_TAG, metadata=session_start_summary_metadata) ]) return session_start_summary
def add_video(name, imgs, epoch, tb_writer): # Make a video from the given imgs and output to tensorboard. strt = time.time() vid_imgs = np.array(imgs) # TxHxWxC, C=RGBA video = tensorboardX.summary.make_video(vid_imgs, fps=12) # slower: fps<24 vs = Summary(value=[Summary.Value(tag=name+'_video', image=video)]) tb_writer.file_writer.add_summary(vs, global_step=epoch) # add_video takes NxTxHxWxC and fails on RGBA #tb_writer.add_video(name+'_video', vid_tensor=vid_imgs, fps=4) print('{:s} video took {:2f}'.format(name, time.time()-strt))
def add_video(name, imgs, epoch, tb_writer): strt = time.time() from tensorboardX import summary from tensorboardX.proto.summary_pb2 import Summary vid_imgs = np.array(imgs) # TxHxWxC, C=RGBA video = summary.make_video(vid_imgs, fps=24) vs = Summary(value=[Summary.Value(tag=name + '_video', image=video)]) tb_writer.file_writer.add_summary(vs, global_step=epoch) # add_video takes NxTxHxWxC and fails on RGBA #tb_writer.add_video(name+'_video', vid_tensor=vid_imgs, fps=4) print('{:s} video took {:2f}'.format(name, time.time() - strt))
def add_video(writer, tag, tensor_thwc, global_step=None, fps=30, walltime=None): """found that add_video from tbX is buggy""" tag = _clean_tag(tag) video = make_video(tensor_thwc, fps) summary = Summary(value=[Summary.Value(tag=tag, image=video)]) writer.file_writer.add_summary(summary, global_step, walltime)
def add_image(self, tag, img_np, global_step=None): """Add image data to summary. Note that this requires the ``pillow`` package. Args: tag (string): Data identifier img_np (np.ndarray): Image data, uint8 global_step (int): Global step value to record Shape: img_tensor: :math:`(H, W, 3)`. """ tag = tensorboardX.summary._clean_tag(tag) image = tensorboardX.summary.make_image(img_np) self.file_writer.add_summary(Summary(value=[Summary.Value(tag=tag, image=image)]), global_step)
def test_event_file_writer_roundtrip(self): _TAGNAME = 'dummy' _DUMMY_VALUE = 42 logdir = self.get_temp_dir() w = EventFileWriter(logdir) summary = Summary( value=[Summary.Value(tag=_TAGNAME, simple_value=_DUMMY_VALUE)]) fakeevent = event_pb2.Event(summary=summary) w.add_event(fakeevent) w.close() event_files = sorted(glob.glob(os.path.join(logdir, '*'))) self.assertEqual(len(event_files), 1) r = PyRecordReader_New(event_files[0]) r.GetNext() # meta data, so skip r.GetNext() self.assertEqual(fakeevent.SerializeToString(), r.record())
def text(tag, text): plugin_data = SummaryMetadata.PluginData( plugin_name="text", content=TextPluginData(version=0).SerializeToString()) smd = SummaryMetadata(plugin_data=plugin_data) string_val = [] for item in text: string_val.append(item.encode(encoding="utf_8")) tensor = TensorProto( dtype="DT_STRING", string_val=string_val, tensor_shape=TensorShapeProto( dim=[TensorShapeProto.Dim(size=len(text))]), ) return Summary(value=[Summary.Value(tag=tag, metadata=smd, tensor=tensor)])
def make_experiment_summary(hparam_infos, metric_infos, experiment): """Define hyperparameters and metrics. Args: hparam_infos: information about all hyperparameters (name, description, type etc.), list of dicts containing 'name' (required), 'type', 'description', 'display_name', 'domain_discrete', 'domain_interval' metric_infos: information about all metrics (tag, description etc.), list of dicts containing 'tag' (required), 'dataset_type', 'description', 'display_name' experiment: dict containing 'name' (required), 'description', 'time_created_secs', 'user' Returns: """ def make_hparam_info(hparam): data_type = hparam.get("type") if hparam.get("type") is None: data_type = DataType.DATA_TYPE_UNSET elif hparam.get("type") in string_types: data_type = DataType.DATA_TYPE_STRING elif hparam.get("type") is bool: data_type = DataType.DATA_TYPE_BOOL elif hparam.get("type") in (float, int): data_type = DataType.DATA_TYPE_FLOAT64 return HParamInfo( name=hparam["name"], type=data_type, description=hparam.get("description"), display_name=hparam.get("display_name"), domain_discrete=hparam.get("domain_discrete"), domain_interval=hparam.get("domain_interval"), ) def make_metric_info(metric): return MetricInfo( name=MetricName(tag=metric["tag"]), dataset_type=DatasetType.Value( f'DATASET_{metric.get("dataset_type", "UNKNOWN").upper()}'), description=metric.get("description"), display_name=metric.get("display_name"), ) def make_experiment_info(experiment, metric_infos, hparam_infos): return Experiment( name=experiment["name"], description=experiment.get("description"), time_created_secs=experiment.get("time_created_secs"), user=experiment.get("user"), metric_infos=metric_infos, hparam_infos=hparam_infos, ) metric_infos = [make_metric_info(m) for m in metric_infos] hparam_infos = [make_hparam_info(hp) for hp in hparam_infos] experiment = make_experiment_info(experiment, metric_infos, hparam_infos) experiment_content = HParamsPluginData(experiment=experiment, version=PLUGIN_DATA_VERSION) experiment_summary_metadata = SummaryMetadata( plugin_data=SummaryMetadata.PluginData( plugin_name=PLUGIN_NAME, content=experiment_content.SerializeToString())) experiment_summary = Summary(value=[ Summary.Value(tag=EXPERIMENT_TAG, metadata=experiment_summary_metadata) ]) return experiment_summary
def add_image(writer, tag, img): summary = Summary(value=[Summary.Value(tag=tag, image=summary_image(img))]) writer.file_writer.add_summary(summary)
def _video(self, tag, vid): tag = tbxsummary._clean_tag(tag) return TBXSummary(value=[TBXSummary.Value(tag=tag, image=vid)])
def _video(tag, vid): # noinspection PyProtectedMember tag = tbxsummary._clean_tag(tag) return TBXSummary(value=[TBXSummary.Value(tag=tag, image=vid)])