Beispiel #1
0
 def test_default_generation_strategy(self) -> None:
     """Test that Sobol+GPEI is used if no GenerationStrategy is provided."""
     ax_client = AxClient()
     ax_client.create_experiment(
         parameters=[  # pyre-fixme[6]: expected union that should include
             {"name": "x1", "type": "range", "bounds": [-5.0, 10.0]},
             {"name": "x2", "type": "range", "bounds": [0.0, 15.0]},
         ],
         objective_name="branin",
         minimize=True,
     )
     self.assertEqual(
         [s.model for s in not_none(ax_client.generation_strategy)._steps],
         [Models.SOBOL, Models.GPEI],
     )
     with self.assertRaisesRegex(ValueError, ".* no trials."):
         ax_client.get_optimization_trace(objective_optimum=branin.fmin)
     for i in range(6):
         parameterization, trial_index = ax_client.get_next_trial()
         x1, x2 = parameterization.get("x1"), parameterization.get("x2")
         ax_client.complete_trial(
             trial_index,
             raw_data={
                 "branin": (
                     checked_cast(
                         float,
                         branin(checked_cast(float, x1), checked_cast(float, x2)),
                     ),
                     0.0,
                 )
             },
             sample_size=i,
         )
         if i < 5:
             with self.assertRaisesRegex(ValueError, "Could not obtain contour"):
                 ax_client.get_contour_plot(param_x="x1", param_y="x2")
     ax_client.get_optimization_trace(objective_optimum=branin.fmin)
     ax_client.get_contour_plot()
     self.assertIn("x1", ax_client.get_trials_data_frame())
     self.assertIn("x2", ax_client.get_trials_data_frame())
     self.assertIn("branin", ax_client.get_trials_data_frame())
     self.assertEqual(len(ax_client.get_trials_data_frame()), 6)
     # Test that Sobol is chosen when all parameters are choice.
     ax_client = AxClient()
     ax_client.create_experiment(
         parameters=[  # pyre-fixme[6]: expected union that should include
             {"name": "x1", "type": "choice", "values": [1, 2, 3]},
             {"name": "x2", "type": "choice", "values": [1, 2, 3]},
         ]
     )
     self.assertEqual(
         [s.model for s in not_none(ax_client.generation_strategy)._steps],
         [Models.SOBOL],
     )
     self.assertEqual(ax_client.get_recommended_max_parallelism(), [(-1, -1)])
     self.assertTrue(ax_client.get_trials_data_frame().empty)
Beispiel #2
0
 def test_default_generation_strategy_continuous(self, _a, _b, _c,
                                                 _d) -> None:
     """Test that Sobol+GPEI is used if no GenerationStrategy is provided."""
     ax_client = AxClient()
     ax_client.create_experiment(
         parameters=[  # pyre-fixme[6]: expected union that should include
             {
                 "name": "x",
                 "type": "range",
                 "bounds": [-5.0, 10.0]
             },
             {
                 "name": "y",
                 "type": "range",
                 "bounds": [0.0, 15.0]
             },
         ],
         objective_name="a",
         minimize=True,
     )
     self.assertEqual(
         [s.model for s in not_none(ax_client.generation_strategy)._steps],
         [Models.SOBOL, Models.GPEI],
     )
     with self.assertRaisesRegex(ValueError, ".* no trials"):
         ax_client.get_optimization_trace(objective_optimum=branin.fmin)
     for i in range(6):
         parameterization, trial_index = ax_client.get_next_trial()
         x, y = parameterization.get("x"), parameterization.get("y")
         ax_client.complete_trial(
             trial_index,
             raw_data={
                 "a": (
                     checked_cast(
                         float,
                         branin(checked_cast(float, x),
                                checked_cast(float, y)),
                     ),
                     0.0,
                 )
             },
             sample_size=i,
         )
     self.assertEqual(ax_client.generation_strategy.model._model_key,
                      "GPEI")
     ax_client.get_optimization_trace(objective_optimum=branin.fmin)
     ax_client.get_contour_plot()
     ax_client.get_feature_importances()
     trials_df = ax_client.get_trials_data_frame()
     self.assertIn("x", trials_df)
     self.assertIn("y", trials_df)
     self.assertIn("a", trials_df)
     self.assertEqual(len(trials_df), 6)
Beispiel #3
0
def automatic_hyperparameter_search(drug_id,
                                    num_trails=50,
                                    num_splits=3,
                                    num_epochs=50,
                                    data_folder='../example_data/'):
    data_file_name = f'{data_folder}/{drug_id}.pickle'

    with open(data_file_name, 'rb') as f:
        data = pickle.load(f)

    if 'hyperparameter_search' in data.keys():
        return

    ax_client = AxClient()
    ax_client.create_experiment(name=f"drug_id_{drug_id}",
                                parameters=[
                                    {
                                        "name": "lr",
                                        "value_type": 'float',
                                        "type": "range",
                                        "bounds": [1e-5, 1e0],
                                        "log_scale": True
                                    },
                                    {
                                        "name":
                                        "l2_regularization_coefficient",
                                        "value_type": 'float',
                                        "type": "range",
                                        "bounds": [1e-5, 1e0],
                                        "log_scale": True
                                    },
                                    {
                                        "name": "num_layers",
                                        "value_type": 'int',
                                        "type": "range",
                                        "bounds": [1, 5]
                                    },
                                    {
                                        "name": "num_neurons",
                                        "value_type": 'int',
                                        "type": "range",
                                        "bounds": [10, 100]
                                    },
                                ],
                                objective_name="score",
                                minimize=False)

    for i in range(num_trails):
        parameters, trial_index = ax_client.get_next_trial()
        ax_client.complete_trial(trial_index=trial_index,
                                 raw_data=evaluate(parameters, data,
                                                   num_splits, num_epochs))

    best_parameters, values = ax_client.get_best_parameters()
    trace = ax_client.get_optimization_trace()

    data['hyperparameter_search'] = {}
    data['hyperparameter_search']['score'] = values[0]['score']
    data['hyperparameter_search']['neural_net_config'] = best_parameters

    with open(data_file_name, 'wb') as f:
        pickle.dump(data, f)