コード例 #1
0
    def test_get_scalars_with_pivot_table_with_missing_value(self):
        mock_api_client = mock.Mock()

        def stream_experiment_data(request, **kwargs):
            self.assertEqual(request.experiment_id, "789")
            self.assertEqual(kwargs["metadata"], grpc_util.version_metadata())
            response = export_service_pb2.StreamExperimentDataResponse()
            response.run_name = "train"
            response.tag_name = "batch_loss"
            response.points.steps.append(0)
            response.points.values.append(0.5)
            response.points.wall_times.add(seconds=0, nanos=0)
            response.points.steps.append(1)
            response.points.values.append(0.25)
            response.points.wall_times.add(seconds=1, nanos=0)
            yield response
            response = export_service_pb2.StreamExperimentDataResponse()
            response.run_name = "train"
            response.tag_name = "epoch_loss"
            response.points.steps.append(0)
            response.points.values.append(0.375)
            response.points.wall_times.add(seconds=2, nanos=0)
            yield response

        mock_api_client.StreamExperimentData = mock.Mock(
            wraps=stream_experiment_data
        )

        with mock.patch.object(
            experiment_from_dev,
            "get_api_client",
            lambda api_endpoint: mock_api_client,
        ):
            experiment = experiment_from_dev.ExperimentFromDev("789")
            with self.assertRaisesRegex(
                ValueError,
                r"contains missing value\(s\).*different sets of "
                r"steps.*pivot=False",
            ):
                experiment.get_scalars(pivot=True)
コード例 #2
0
    def test_get_scalars_with_actual_inf_and_nan(self):
        """Test for get_scalars() call that involve inf and nan in user data."""
        mock_api_client = mock.Mock()

        def stream_experiment_data(request, **kwargs):
            self.assertEqual(request.experiment_id, "789")
            self.assertEqual(kwargs["metadata"], grpc_util.version_metadata())
            response = export_service_pb2.StreamExperimentDataResponse()
            response.run_name = "train"
            response.tag_name = "batch_loss"
            response.points.steps.append(0)
            response.points.values.append(np.nan)
            response.points.wall_times.add(seconds=0, nanos=0)
            response.points.steps.append(1)
            response.points.values.append(np.inf)
            response.points.wall_times.add(seconds=10, nanos=0)
            yield response

        mock_api_client.StreamExperimentData = mock.Mock(
            wraps=stream_experiment_data)

        with mock.patch.object(
                experiment_from_dev,
                "get_api_client",
                lambda api_endpoint: mock_api_client,
        ):
            experiment = experiment_from_dev.ExperimentFromDev("789")
            dataframe = experiment.get_scalars()

        expected = pandas.DataFrame({
            "run": ["train"] * 2,
            "tag": ["batch_loss"] * 2,
            "step": [0, 1],
            "value": [np.nan, np.inf],
            "wall_time": [0.0, 10.0],
        }).pivot_table(["value", "wall_time"], ["run", "step"], "tag")
        pandas.testing.assert_frame_equal(dataframe,
                                          expected,
                                          check_names=True)
コード例 #3
0
    def test_get_scalars_works(self):
        mock_api_client = mock.Mock()

        def stream_experiment_data(request, **kwargs):
            self.assertEqual(request.experiment_id, "789")
            self.assertEqual(kwargs["metadata"], grpc_util.version_metadata())
            for run in ("train", "test"):
                for tag in ("accuracy", "loss"):
                    response = export_service_pb2.StreamExperimentDataResponse(
                    )
                    response.run_name = run
                    response.tag_name = tag
                    display_name = "%s:%s" % (request.experiment_id, tag)
                    response.tag_metadata.CopyFrom(
                        test_util.scalar_metadata(display_name))
                    for step in range(10):
                        response.points.steps.append(step)
                        if tag == "loss":
                            if run == "train":
                                value = 1.0 / (step + 1)
                                seconds = step
                            else:
                                value = -1.0 / (step + 1)
                                seconds = 600 + step
                        else:  # "accuracy"
                            if run == "train":
                                value = 1.0 / (10 - step)
                                seconds = step * 2
                            else:
                                value = -1.0 / (10 - step)
                                seconds = 600 + step * 2
                        response.points.values.append(value)
                        response.points.wall_times.add(seconds=seconds,
                                                       nanos=0)
                    yield response

        mock_api_client.StreamExperimentData = mock.Mock(
            wraps=stream_experiment_data)

        with mock.patch.object(
                experiment_from_dev,
                "get_api_client",
                lambda api_endpoint: mock_api_client,
        ):
            experiment = experiment_from_dev.ExperimentFromDev("789")
            for pivot in (False, True):
                for include_wall_time in (False, True):
                    with self.subTest("pivot=%s; include_wall_time=%s" %
                                      (pivot, include_wall_time)):
                        dataframe = experiment.get_scalars(
                            pivot=pivot, include_wall_time=include_wall_time)

                        if pivot:
                            run_key = (("run",
                                        "") if include_wall_time else "run")
                            step_key = (("step",
                                         "") if include_wall_time else "step")
                            accuracy_value_key = (("value", "accuracy")
                                                  if include_wall_time else
                                                  "accuracy")
                            loss_value_key = (("value", "loss")
                                              if include_wall_time else "loss")
                            data = {
                                run_key: ["test"] * 10 + ["train"] * 10,
                                step_key:
                                np.concatenate(
                                    [np.arange(0, 10),
                                     np.arange(0, 10)]),
                                accuracy_value_key:
                                np.concatenate([
                                    -1.0 / (10.0 - np.arange(0, 10)),
                                    1.0 / (10.0 - np.arange(0, 10)),
                                ], ),
                                loss_value_key:
                                np.concatenate([
                                    -1.0 / (1.0 + np.arange(0, 10)),
                                    1.0 / (1.0 + np.arange(0, 10)),
                                ], ),
                            }
                            if include_wall_time:
                                data[("wall_time",
                                      "accuracy")] = np.concatenate([
                                          600.0 + 2.0 * np.arange(0, 10),
                                          2.0 * np.arange(0, 10),
                                      ])
                                data[("wall_time", "loss")] = np.concatenate([
                                    600.0 + np.arange(0, 10),
                                    1.0 * np.arange(0, 10),
                                ])
                            expected = pandas.DataFrame(data)
                        else:  # No pivot_table.
                            data = {
                                "run": ["train"] * 20 + ["test"] * 20,
                                "tag": (["accuracy"] * 10 + ["loss"] * 10) * 2,
                                "step":
                                list(np.arange(0, 10)) * 4,
                                "value":
                                np.concatenate([
                                    1.0 / (10.0 - np.arange(0, 10)),
                                    1.0 / (1.0 + np.arange(0, 10)),
                                    -1.0 / (10.0 - np.arange(0, 10)),
                                    -1.0 / (1.0 + np.arange(0, 10)),
                                ]),
                            }
                            if include_wall_time:
                                data["wall_time"] = np.concatenate([
                                    2.0 * np.arange(0, 10),
                                    1.0 * np.arange(0, 10),
                                    600.0 + 2.0 * np.arange(0, 10),
                                    600.0 + np.arange(0, 10),
                                ])
                            expected = pandas.DataFrame(data)

                        pandas.testing.assert_frame_equal(
                            dataframe,
                            expected,
                            check_names=True,
                        )
コード例 #4
0
    def test_get_scalars_works(self):
        mock_api_client = mock.Mock()

        def stream_experiment_data(request, **kwargs):
            self.assertEqual(request.experiment_id, "789")
            self.assertEqual(kwargs["metadata"], grpc_util.version_metadata())
            for run in ("train", "test"):
                for tag in ("accuracy", "loss"):
                    response = export_service_pb2.StreamExperimentDataResponse(
                    )
                    response.run_name = run
                    response.tag_name = tag
                    display_name = "%s:%s" % (request.experiment_id, tag)
                    response.tag_metadata.CopyFrom(
                        test_util.scalar_metadata(display_name))
                    for step in range(10):
                        response.points.steps.append(step)
                        if tag == "loss":
                            if run == "train":
                                value = 1.0 / (step + 1)
                                seconds = step
                            else:
                                value = -1.0 / (step + 1)
                                seconds = 600 + step
                        else:  # "accuracy"
                            if run == "train":
                                value = 1.0 / (10 - step)
                                seconds = step * 2
                            else:
                                value = -1.0 / (10 - step)
                                seconds = 600 + step * 2
                        response.points.values.append(value)
                        response.points.wall_times.add(seconds=seconds,
                                                       nanos=0)
                    yield response

        mock_api_client.StreamExperimentData = mock.Mock(
            wraps=stream_experiment_data)

        with mock.patch.object(
                experiment_from_dev,
                "get_api_client",
                lambda api_endpoint: mock_api_client,
        ):
            experiment = experiment_from_dev.ExperimentFromDev("789")
            for pivot in (None, False):
                with self.subTest("pivot=%s" % pivot):
                    dataframe = experiment.get_scalars(pivot=pivot)

                    expected = pandas.DataFrame({
                        "run": ["train"] * 20 + ["test"] * 20,
                        "tag": (["accuracy"] * 10 + ["loss"] * 10) * 2,
                        "step":
                        list(np.arange(0, 10)) * 4,
                        "wall_time":
                        np.concatenate([
                            2.0 * np.arange(0, 10),
                            1.0 * np.arange(0, 10),
                            600.0 + 2.0 * np.arange(0, 10),
                            600.0 + np.arange(0, 10),
                        ]),
                        "value":
                        np.concatenate([
                            1.0 / (10.0 - np.arange(0, 10)),
                            1.0 / (1.0 + np.arange(0, 10)),
                            -1.0 / (10.0 - np.arange(0, 10)),
                            -1.0 / (1.0 + np.arange(0, 10)),
                        ]),
                    })

                    if pivot is None:  # Default behavior: pivot_table.
                        pandas.testing.assert_frame_equal(
                            dataframe,
                            expected.pivot_table(["value", "wall_time"],
                                                 ["run", "step"], "tag"),
                            check_names=True,
                        )
                    else:  # pivot == False
                        pandas.testing.assert_frame_equal(dataframe,
                                                          expected,
                                                          check_names=True)
コード例 #5
0
def main(args):
    experiment = experiment_from_dev.ExperimentFromDev(
        args.experiment_id, api_endpoint=args.api_endpoint
    )
    dataframe = experiment.get_scalars()
    print(dataframe)
コード例 #6
0
ファイル: test_binary.py プロジェクト: jverre/tensorboard-1
def main(args):
    experiment = experiment_from_dev.ExperimentFromDev(
        args.experiment_id, api_endpoint=args.api_endpoint)
    dataframe = experiment.get_scalars(
        pivot=args.pivot, include_wall_time=args.include_wall_time)
    print(dataframe)