Используя библиотеку 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, чтобы не интегрировать информацию о неисправных моделях?