Как не допустить, чтобы «hyperopt» интегрировал неудачные результаты модели в обновление параметров? - PullRequest
0 голосов
/ 08 марта 2019

Используя библиотеку hyperopt в python, я хочу оптимизировать параметры нейронной сети. Иногда выбранные комбинации параметров приводят к нестабильной модели, что приводит к сбою процедуры построения модели.

Теперь я создал обработчик исключения / исключения, который предотвращает остановку всего процесса оптимизации гиперпараметра. Проблема, с которой я сталкиваюсь, заключается в том, что обновление hyperopt по-прежнему объединяет (произвольно выбранный) результат потери неудачной модели для информирования последующих вариантов выбора параметров. Я хочу, чтобы hyperopt игнорировал неудачные модели. Моя целевая функция заключается в следующем:

def objective_fn_for_ann_hyperopt(params, nfolds=5):

     config.ITERATION += 1
     try:
            model = h2o.estimators.H2ODeepLearningEstimator(
            activation='rectifier_with_dropout',
            rho=params['rho'],
            epsilon=params['epsilon'],
            max_w2=10.,
            epochs=params['epochs'],
            hidden=hidden,
            nfolds=nfolds,
            hidden_dropout_ratios=hidden_dropout_ratios,
            input_dropout_ratio=params['input_dropout_ratio'],
            l2=params['l2'],
            l1=1e-5,
            distribution=params['distribution'],
            stopping_metric='mse',
            stopping_tolerance=0.05,
            stopping_rounds=15,

            keep_cross_validation_predictions=True,
            fold_assignment="Modulo",

        )

            model.train(config.x, config.y, training_frame=config.train,
                        validation_frame=config.test)


            run_time = timer() - start

            loss = model._model_json['output']['cross_validation_metrics_summary'].as_data_frame(
            ).iloc[5]['mean']


            success = STATUS_OK #'ok'
        except:

            success = STATUS_FAIL  #'fail'              
            loss = 0 #arbitrary number
            run_time = timer() - start


        return {'loss': loss, 'params': params, 'iteration': config.ITERATION,

                'train_time': run_time, 'status': success}

Как я могу связаться с программой обновления hyperopt, чтобы не интегрировать информацию о неисправных моделях?

...