Hyperopt Изменить значения Trials () Объект вручную; Теплый старт Hyperopt - PullRequest
0 голосов
/ 21 февраля 2020

Ищу возможность Warmstart Hyperopt. Одним из способов было бы вручную заполнить список Trials.trials с помощью гиперметров. Это возможно на самом деле, но мне интересно, действительно ли это влияет на оптимизацию или этот Trials.trials является просто видимой частью объекта Trials и Hyperopt.

1 Ответ

0 голосов
/ 21 февраля 2020

Список trials.trials не содержит всю информацию !! Также необходимо изменить trials._dynamic_trials из-за функции resfre sh в baye.py, которая обновляет данные из trials.trials данными из trials._dynamic_trials

В общем, нагревание должно быть возможным. Я создал поддельный объект trials размером с мои теплые состояния, вызвав fmin для объекта fre sh trials с произвольным пространством поиска и целевой функцией. После этого объект trials может быть изменен путем итерации по длине trials.trials и установки значений следующим образом:

list_of_coldstart_dict = [one_possible_and_evaluation,second_possible_and_evaluation,...]
fake_space = {
'test': 2-hp.loguniform('test_02',0.001, 0.1)
}
def Objective(params):
    return {"loss":0, 'status': STATUS_OK}
trials = Trials()
fmin(Objective,fake_space,
    algo=partial(tpe.suggest, n_startup_jobs=len(list_of_coldstart_dict)), max_evals=len(list_of_coldstart_dicts), 
        trials=new_trials,verbose=1)

for in in range(len(trials.trials):
    trials.trials[i] = list_of_coldstart_dict[i]
    trials._dynamic_trials[i] = list_of_coldstart_dict[i]
    trials.results[i] = trials.trials[i]['result']

Остерегайтесь поддерживать необходимую структуру структуры dict of dicts внутри trials.trials [i ]

...