Hyperopt: определение пространства поиска

У меня проблемы с логикой определения пространства поиска.

Я хочу поискать по этим:

  • Тип модели для использования (features_and_hours, features_only, hours_only, no_features_no_hours)
  • Количество скрытых единиц (output_units)
  • регуляризация матрицы ядра (тип = l1, l2 или l1l2)
  • значения регуляризации для матрицы ядра (от 0,0 до 0,5)
  • регуляризация действий (type = l1, l2 или l1l2)
  • значения регуляризации для действий (от 0,0 до 0,5)
  • количество эпох (num_epochs, 1, 5 или 10)
  • оптимизатор, который будет использоваться (adadelta, adam или rmsprop)
  • следует ли и как обращать внимание (до, после или без)

Вот как я это настроил, следуя этому примеру (второй пост на странице, автор jacobzweig)

def para_space():

        space_paras = {'model_type': hp.choice('model_type', ['features_and_hours', 'features_only', 'hours_only', 'no_features_no_hours']),
                        'output_units': hp.uniform('output_units', 1, 10),
                        'kernel_reg': hp.choice('kernel_reg', [{'reg_type':'l1', 'reg_vals': hp.uniform('reg_vals', 0.0, 0.5)},
                                                                {'reg_type':'l2','reg_vals': hp.uniform('reg_vals', 0.0, 0.5)},
                                                                {'reg_type':'l1l2', 'reg_vals': hp.uniform('reg_vals', 0.0, 0.5)}]),
                        'activity_reg': hp.choice('activity_reg', [{'reg_type':'l1', 'reg_vals': hp.uniform('reg_vals', 0.0, 0.5)},
                                                                {'reg_type':'l2','reg_vals': hp.uniform('reg_vals', 0.0, 0.5)},
                                                                {'reg_type':'l1l2', 'reg_vals': hp.uniform('reg_vals', 0.0, 0.5)}]),
                        'num_epochs': hp.choice('num_epochs', [1, 5, 10]),
                        'optimizer': hp.choice('optimizer', ['adadelta', 'adam', 'rmsprop']),
                        'attention': hp.choice('attention', ['before', 'after', 'none'])}
        return space_paras

Я получаю следующее сообщение об ошибке:

Using TensorFlow backend.
Traceback (most recent call last):
  File "Jan22Model1.py", line 374, in <module>
    best = fmin(lstm_model_1, params, algo=tpe.suggest, max_evals=5, trials=trials)
  File "/user/pkgs/anaconda2/lib/python2.7/site-packages/hyperopt/fmin.py", line 307, in fmin
    return_argmin=return_argmin,
  File "/user/pkgs/anaconda2/lib/python2.7/site-packages/hyperopt/base.py", line 635, in fmin
    return_argmin=return_argmin)
  File "/user/pkgs/anaconda2/lib/python2.7/site-packages/hyperopt/fmin.py", line 314, in fmin
    pass_expr_memo_ctrl=pass_expr_memo_ctrl)
  File "/user/pkgs/anaconda2/lib/python2.7/site-packages/hyperopt/base.py", line 776, in __init__
    raise DuplicateLabel(label)
hyperopt.exceptions.DuplicateLabel: reg_vals

Но в этом примере похоже, что есть повторяющиеся метки, которые не вызывают ошибки. Что я делаю неправильно?


person StatsSorceress    schedule 22.01.2018    source источник
comment
В примере, на который вы ссылаетесь, не видно повторяющихся ярлыков. Попробуйте удалить один из kernel_reg или activity_reg; это работает?   -  person desertnaut    schedule 22.01.2018


Ответы (1)


Я закончил реструктуризацию пространства, что решило проблему:

def para_space():
    space_paras = {'model_type': hp.choice('model_type', ['features_and_hours', 'features_only', 'hours_only', 'no_features_no_hours']),
                    'output_units': hp.uniform('output_units', 1, 10),
                    'kernel_reg': hp.choice('kernel_reg', ['l1', 'l2', 'l1_l2']),
                    'kernel_reg_value': hp.uniform('kernel_reg_value', 0.0, 0.5),
                    'activity_reg': hp.choice('activity_reg', ['l1', 'l2', 'l1_l2']),
                    'activity_reg_value': hp.uniform('activity_reg_value', 0.0, 0.5),
                     'optimizer': hp.choice('optimizer', ['adadelta', 'adam', 'rmsprop']),
                     'attention': hp.choice('attention', ['before', 'after', 'none'])} 
   return space_paras
person StatsSorceress    schedule 24.01.2018