def __init__(self, *args, **kwargs): super(CustomScalarsPluginTest, self).__init__(*args, **kwargs) self.logdir = os.path.join(self.get_temp_dir(), 'logdir') os.makedirs(self.logdir) self.logdir_layout = layout_pb2.Layout(category=[ layout_pb2.Category(title='cross entropy', chart=[ layout_pb2.Chart(title='cross entropy', tag=[r'cross entropy']), ], closed=True) ]) self.foo_layout = layout_pb2.Layout(category=[ layout_pb2.Category( title='mean biases', chart=[ layout_pb2.Chart( title='mean layer biases', tag=[r'mean/layer0/biases', r'mean/layer1/biases']) ]), layout_pb2.Category(title='std weights', chart=[ layout_pb2.Chart( title='stddev layer weights', tag=[r'stddev/layer\d+/weights']) ]), # A category with this name is also present in a layout for a # different run (the logdir run) layout_pb2.Category(title='cross entropy', chart=[ layout_pb2.Chart(title='cross entropy 2', tag=[r'cross entropy 2']), ]) ]) # Generate test data. with tf.summary.FileWriter(os.path.join(self.logdir, 'foo')) as writer: writer.add_summary(summary.pb(self.foo_layout)) for step in range(4): writer.add_summary(scalar_summary.pb('squares', step * step), step) with tf.summary.FileWriter(os.path.join(self.logdir, 'bar')) as writer: for step in range(3): writer.add_summary(scalar_summary.pb('increments', step + 1), step) # The '.' run lacks scalar data but has a layout. with tf.summary.FileWriter(self.logdir) as writer: writer.add_summary(summary.pb(self.logdir_layout)) self.plugin = self.createPlugin(self.logdir)
def test_doesnt_add_metadata_to_later_steps(self): old_events = [] for step in range(3): e = event_pb2.Event() e.step = step summary = scalar_summary.pb("foo", 0.125) if step > 0: for v in summary.value: v.ClearField("metadata") e.summary.ParseFromString(summary.SerializeToString()) old_events.append(e) initial_metadata = {} new_events = [] for e in old_events: migrated = self._migrate_event(e, initial_metadata=initial_metadata) new_events.extend(migrated) self.assertLen(new_events, len(old_events)) self.assertEqual( { e.step for e in new_events for v in e.summary.value if v.HasField("metadata") }, {0}, )
def compute_and_check_summary_pb(self, name, data, display_name=None, description=None, data_tensor=None, feed_dict=None): """Use both `op` and `pb` to get a summary, asserting equality. Returns: a `Summary` protocol buffer """ if data_tensor is None: data_tensor = tf.constant(data) op = summary.op(name, data, display_name=display_name, description=description) pb = self.normalize_summary_pb( summary.pb(name, data, display_name=display_name, description=description)) pb_via_op = self.normalize_summary_pb( self.pb_via_op(op, feed_dict=feed_dict)) self.assertProtoEquals(pb, pb_via_op) return pb
def test_already_newstyle_summary_passes_through(self): # ...even when it's from a known plugin and would otherwise be migrated. old_event = event_pb2.Event() old_event.summary.ParseFromString( scalar_summary.pb("foo", 1.25, display_name="bar", description="baz").SerializeToString()) metadata = old_event.summary.value[0].metadata metadata.data_class = summary_pb2.DATA_CLASS_TENSOR # note: not scalar new_events = self._migrate_event(old_event) self.assertLen(new_events, 1) self.assertIs(new_events[0], old_event)
def compute_and_check_summary_pb(self, name, data, display_name=None, description=None, data_tensor=None, feed_dict=None): """Use both `op` and `pb` to get a summary, asserting equality. Returns: a `Summary` protocol buffer """ if data_tensor is None: data_tensor = tf.constant(data) op = summary.op( name, data, display_name=display_name, description=description) pb = self.normalize_summary_pb(summary.pb( name, data, display_name=display_name, description=description)) pb_via_op = self.normalize_summary_pb( self.pb_via_op(op, feed_dict=feed_dict)) self.assertProtoEquals(pb, pb_via_op) return pb
def test_scalar(self): old_event = event_pb2.Event() old_event.step = 123 old_event.wall_time = 456.75 old_event.summary.ParseFromString( scalar_summary.pb("foo", 1.25, display_name="bar", description="baz").SerializeToString()) new_events = self._migrate_event(old_event) self.assertLen(new_events, 1) self.assertLen(new_events[0].summary.value, 1) value = new_events[0].summary.value[0] tensor = tensor_util.make_ndarray(value.tensor) self.assertEqual(tensor.shape, ()) self.assertEqual(tensor.item(), 1.25) self.assertEqual(value.metadata.data_class, summary_pb2.DATA_CLASS_SCALAR) self.assertEqual(value.metadata.plugin_data.plugin_name, scalar_metadata.PLUGIN_NAME)
def __init__(self, *args, **kwargs): super(CustomScalarsPluginTest, self).__init__(*args, **kwargs) self.logdir = os.path.join(self.get_temp_dir(), "logdir") os.makedirs(self.logdir) self.logdir_layout = layout_pb2.Layout(category=[ layout_pb2.Category( title="cross entropy", chart=[ layout_pb2.Chart( title="cross entropy", multiline=layout_pb2.MultilineChartContent( tag=[r"cross entropy"], ), ), ], closed=True, ) ]) self.foo_layout = layout_pb2.Layout(category=[ layout_pb2.Category( title="mean biases", chart=[ layout_pb2.Chart( title="mean layer biases", multiline=layout_pb2.MultilineChartContent(tag=[ r"mean/layer0/biases", r"mean/layer1/biases", ], ), ), ], ), layout_pb2.Category( title="std weights", chart=[ layout_pb2.Chart( title="stddev layer weights", multiline=layout_pb2.MultilineChartContent( tag=[r"stddev/layer\d+/weights"], ), ), ], ), # A category with this name is also present in a layout for a # different run (the logdir run) and also contains a duplicate chart layout_pb2.Category( title="cross entropy", chart=[ layout_pb2.Chart( title="cross entropy margin chart", margin=layout_pb2.MarginChartContent(series=[ layout_pb2.MarginChartContent.Series( value="cross entropy", lower="cross entropy lower", upper="cross entropy upper", ), ], ), ), layout_pb2.Chart( title="cross entropy", multiline=layout_pb2.MultilineChartContent( tag=[r"cross entropy"], ), ), ], ), ]) # Generate test data. with test_util.FileWriterCache.get(os.path.join(self.logdir, "foo")) as writer: writer.add_summary( test_util.ensure_tb_summary_proto(summary.pb(self.foo_layout))) for step in range(4): writer.add_summary( test_util.ensure_tb_summary_proto( scalar_summary.pb("squares", step * step)), step, ) with test_util.FileWriterCache.get(os.path.join(self.logdir, "bar")) as writer: for step in range(3): writer.add_summary( test_util.ensure_tb_summary_proto( scalar_summary.pb("increments", step + 1)), step, ) # The '.' run lacks scalar data but has a layout. with test_util.FileWriterCache.get(self.logdir) as writer: writer.add_summary( test_util.ensure_tb_summary_proto( summary.pb(self.logdir_layout))) self.plugin = self.createPlugin(self.logdir)
def scalar(self, *args, **kwargs): return summary.pb(*args, **kwargs)
def __init__(self, *args, **kwargs): super(CustomScalarsPluginTest, self).__init__(*args, **kwargs) self.logdir = os.path.join(self.get_temp_dir(), 'logdir') os.makedirs(self.logdir) self.logdir_layout = layout_pb2.Layout(category=[ layout_pb2.Category( title='cross entropy', chart=[ layout_pb2.Chart( title='cross entropy', multiline=layout_pb2.MultilineChartContent( tag=[r'cross entropy'], )), ], closed=True) ]) self.foo_layout = layout_pb2.Layout(category=[ layout_pb2.Category( title='mean biases', chart=[ layout_pb2.Chart( title='mean layer biases', multiline=layout_pb2.MultilineChartContent(tag=[ r'mean/layer0/biases', r'mean/layer1/biases' ], )), ]), layout_pb2.Category( title='std weights', chart=[ layout_pb2.Chart( title='stddev layer weights', multiline=layout_pb2.MultilineChartContent( tag=[r'stddev/layer\d+/weights'], )), ]), # A category with this name is also present in a layout for a # different run (the logdir run) and also contains a duplicate chart layout_pb2.Category( title='cross entropy', chart=[ layout_pb2.Chart( title='cross entropy margin chart', margin=layout_pb2.MarginChartContent(series=[ layout_pb2.MarginChartContent.Series( value='cross entropy', lower='cross entropy lower', upper='cross entropy upper'), ], )), layout_pb2.Chart( title='cross entropy', multiline=layout_pb2.MultilineChartContent( tag=[r'cross entropy'], )), ]), ]) # Generate test data. with test_util.FileWriterCache.get(os.path.join(self.logdir, 'foo')) as writer: writer.add_summary(summary.pb(self.foo_layout)) for step in range(4): writer.add_summary(scalar_summary.pb('squares', step * step), step) with test_util.FileWriterCache.get(os.path.join(self.logdir, 'bar')) as writer: for step in range(3): writer.add_summary(scalar_summary.pb('increments', step + 1), step) # The '.' run lacks scalar data but has a layout. with test_util.FileWriterCache.get(self.logdir) as writer: writer.add_summary(summary.pb(self.logdir_layout)) self.plugin = self.createPlugin(self.logdir)
def test_requires_rank_0_in_pb(self): with six.assertRaisesRegex(self, ValueError, r'Expected scalar shape'): summary.pb('a', np.array([1, 1, 3]))
def test_string_value_in_pb(self): with six.assertRaisesRegex(self, ValueError, r'Cast str.*float'): summary.pb('a', np.array("113"))
def scalar(self, *args, **kwargs): return test_util.ensure_tb_summary_proto(summary.pb(*args, **kwargs))
def __init__(self, *args, **kwargs): super(CustomScalarsPluginTest, self).__init__(*args, **kwargs) self.logdir = os.path.join(self.get_temp_dir(), 'logdir') os.makedirs(self.logdir) self.logdir_layout = layout_pb2.Layout( category=[ layout_pb2.Category( title='cross entropy', chart=[ layout_pb2.Chart( title='cross entropy', multiline=layout_pb2.MultilineChartContent( tag=[r'cross entropy'], )), ], closed=True) ] ) self.foo_layout = layout_pb2.Layout( category=[ layout_pb2.Category( title='mean biases', chart=[ layout_pb2.Chart( title='mean layer biases', multiline=layout_pb2.MultilineChartContent( tag=[r'mean/layer0/biases', r'mean/layer1/biases'], )), ] ), layout_pb2.Category( title='std weights', chart=[ layout_pb2.Chart( title='stddev layer weights', multiline=layout_pb2.MultilineChartContent( tag=[r'stddev/layer\d+/weights'], )), ] ), # A category with this name is also present in a layout for a # different run (the logdir run) layout_pb2.Category( title='cross entropy', chart=[ layout_pb2.Chart( title='cross entropy margin chart', margin=layout_pb2.MarginChartContent( series=[ layout_pb2.MarginChartContent.Series( value='cross entropy', lower='cross entropy lower', upper='cross entropy upper'), ], )), ] ), ] ) # Generate test data. with tf.summary.FileWriter(os.path.join(self.logdir, 'foo')) as writer: writer.add_summary(summary.pb(self.foo_layout)) for step in range(4): writer.add_summary(scalar_summary.pb('squares', step * step), step) with tf.summary.FileWriter(os.path.join(self.logdir, 'bar')) as writer: for step in range(3): writer.add_summary(scalar_summary.pb('increments', step + 1), step) # The '.' run lacks scalar data but has a layout. with tf.summary.FileWriter(self.logdir) as writer: writer.add_summary(summary.pb(self.logdir_layout)) self.plugin = self.createPlugin(self.logdir)