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},
        )
Exemple #3
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
Exemple #4
0
    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)
Exemple #5
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
Exemple #6
0
    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)
Exemple #8
0
 def scalar(self, *args, **kwargs):
     return summary.pb(*args, **kwargs)
Exemple #9
0
    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)
Exemple #10
0
 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]))
Exemple #11
0
 def test_string_value_in_pb(self):
   with six.assertRaisesRegex(self, ValueError, r'Cast str.*float'):
     summary.pb('a', np.array("113"))
Exemple #12
0
 def scalar(self, *args, **kwargs):
     return test_util.ensure_tb_summary_proto(summary.pb(*args, **kwargs))
Exemple #13
0
 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]))
Exemple #14
0
 def test_string_value_in_pb(self):
     with six.assertRaisesRegex(self, ValueError, r'Cast str.*float'):
         summary.pb('a', np.array("113"))
  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)