示例#1
0
class BOOptimizer(object):
    def __init__(self, hptuning_config):
        self.hptuning_config = hptuning_config
        self.n_initial_trials = self.hptuning_config.bo.n_initial_trials
        self.space = SearchSpace(hptuning_config=hptuning_config)
        self.utility_function = UtilityFunction(
            config=hptuning_config.bo.utility_function,
            seed=hptuning_config.seed)
        self.n_warmup = hptuning_config.bo.utility_function.n_warmup or 5000
        self.n_iter = hptuning_config.bo.utility_function.n_iter or 150

    def _maximize(self):
        """ Find argmax of the acquisition function."""
        if not self.space.is_observations_valid():
            return None
        y_max = self.space.y.max()
        self.utility_function.gaussian_process.fit(self.space.x, self.space.y)
        return self.utility_function.max_compute(y_max=y_max,
                                                 bounds=self.space.bounds,
                                                 n_warmup=self.n_warmup,
                                                 n_iter=self.n_iter)

    def add_observations(self, configs, metrics):
        # Turn configs and metrics into data points
        self.space.add_observations(configs=configs, metrics=metrics)

    def get_suggestion(self):
        x = self._maximize()
        return self.space.get_suggestion(x)
示例#2
0
class BOOptimizer(object):

    def __init__(self, hptuning_config):
        self.hptuning_config = hptuning_config
        self.n_initial_trials = self.hptuning_config.bo.n_initial_trials
        self.space = SearchSpace(hptuning_config=hptuning_config)
        self.utility_function = UtilityFunction(
            config=hptuning_config.bo.utility_function, seed=hptuning_config.seed)
        self.n_warmup = hptuning_config.bo.utility_function.n_warmup or 5000
        self.n_iter = hptuning_config.bo.utility_function.n_iter or 150

    def _maximize(self):
        """ Find argmax of the acquisition function."""
        if not self.space.is_observations_valid():
            return None
        y_max = self.space.y.max()
        self.utility_function.gaussian_process.fit(self.space.x, self.space.y)
        return self.utility_function.max_compute(y_max=y_max,
                                                 bounds=self.space.bounds,
                                                 n_warmup=self.n_warmup,
                                                 n_iter=self.n_iter)

    def add_observations(self, configs, metrics):
        # Turn configs and metrics into data points
        self.space.add_observations(configs=configs, metrics=metrics)

    def get_suggestion(self):
        x = self._maximize()
        return self.space.get_suggestion(x)
示例#3
0
    def test_add_observation_to_space_search(self):
        space1 = SearchSpace(hptuning_config=self.manager1.hptuning_config)

        assert space1.x == []
        assert space1.y == []

        configs = [
            {'feature1': 1, 'feature2': 1, 'feature3': 1},
            {'feature1': 2, 'feature2': 1.2, 'feature3': 2},
            {'feature1': 3, 'feature2': 1.3, 'feature3': 3}
        ]
        metrics = [1, 2, 3]

        space1.add_observations(
            configs=configs,
            metrics=metrics
        )

        assert len(space1.x) == 3
        assert len(space1.y) == 3

        for i, feature in enumerate(space1.features):
            if feature == 'feature1':
                assert np.all(space1.x[:, i] == [1, 2, 3])
            elif feature == 'feature2':
                assert np.all(space1.x[:, i] == [1, 1.2, 1.3])
            elif feature == 'feature3':
                assert np.all(space1.x[:, i] == [1, 2, 3])

        assert np.all(space1.y == np.array([-1, -2, -3]))

        space2 = SearchSpace(hptuning_config=self.manager2.hptuning_config)

        configs = [
            {'feature1': 1, 'feature2': 1, 'feature3': 1, 'feature4': 1, 'feature5': 'a'},
            {'feature1': 2, 'feature2': 1.2, 'feature3': 2, 'feature4': 4, 'feature5': 'b'},
            {'feature1': 3, 'feature2': 1.3, 'feature3': 3, 'feature4': 3, 'feature5': 'a'}
        ]
        metrics = [1, 2, 3]

        space2.add_observations(
            configs=configs,
            metrics=metrics
        )

        assert len(space2.x) == 3
        assert len(space2.y) == 3

        for i, feature in enumerate(space2.features):
            if feature == 'feature1':
                assert np.all(space2.x[:, i] == [1, 2, 3])
            elif feature == 'feature2':
                assert np.all(space2.x[:, i] == [1, 1.2, 1.3])
            elif feature == 'feature3':
                assert np.all(space2.x[:, i] == [1, 2, 3])
            elif feature == 'feature4':
                assert np.all(space2.x[:, i] == [1, 4, 3])
            elif feature == 'feature5':
                assert np.all(space2.x[:, i:i + 3] == [[1, 0, 0], [0, 1, 0], [1, 0, 0]])

        assert np.all(space2.y == np.array(metrics))
    def test_add_observation_to_space_search(self):
        space1 = SearchSpace(hptuning_config=self.manager1.hptuning_config)

        assert space1.x == []
        assert space1.y == []

        configs = [
            {'feature1': 1, 'feature2': 1, 'feature3': 1},
            {'feature1': 2, 'feature2': 1.2, 'feature3': 2},
            {'feature1': 3, 'feature2': 1.3, 'feature3': 3}
        ]
        metrics = [1, 2, 3]

        space1.add_observations(
            configs=configs,
            metrics=metrics
        )

        assert len(space1.x) == 3
        assert len(space1.y) == 3

        for i, feature in enumerate(space1.features):
            if feature == 'feature1':
                assert np.all(space1.x[:, i] == [1, 2, 3])
            elif feature == 'feature2':
                assert np.all(space1.x[:, i] == [1, 1.2, 1.3])
            elif feature == 'feature3':
                assert np.all(space1.x[:, i] == [1, 2, 3])

        assert np.all(space1.y == np.array([-1, -2, -3]))

        space2 = SearchSpace(hptuning_config=self.manager2.hptuning_config)

        configs = [
            {'feature1': 1, 'feature2': 1, 'feature3': 1, 'feature4': 1, 'feature5': 'a'},
            {'feature1': 2, 'feature2': 1.2, 'feature3': 2, 'feature4': 4, 'feature5': 'b'},
            {'feature1': 3, 'feature2': 1.3, 'feature3': 3, 'feature4': 3, 'feature5': 'a'}
        ]
        metrics = [1, 2, 3]

        space2.add_observations(
            configs=configs,
            metrics=metrics
        )

        assert len(space2.x) == 3
        assert len(space2.y) == 3

        for i, feature in enumerate(space2.features):
            if feature == 'feature1':
                assert np.all(space2.x[:, i] == [1, 2, 3])
            elif feature == 'feature2':
                assert np.all(space2.x[:, i] == [1, 1.2, 1.3])
            elif feature == 'feature3':
                assert np.all(space2.x[:, i] == [1, 2, 3])
            elif feature == 'feature4':
                assert np.all(space2.x[:, i] == [1, 4, 3])
            elif feature == 'feature5':
                assert np.all(space2.x[:, i:i + 3] == [[1, 0, 0], [0, 1, 0], [1, 0, 0]])

        assert np.all(space2.y == np.array(metrics))