Python Hyperopt:定义搜索空间

Python Hyperopt:定义搜索空间,python,machine-learning,hyperparameters,Python,Machine Learning,Hyperparameters,搜索空间定义的逻辑有问题 我想搜索以下内容: 要使用的模型类型(功能和小时数、仅功能、仅小时数、无功能和无小时数) 隐藏单位的数量(输出单位) 核矩阵的正则化(类型=l1、l2或l1l2) 核矩阵的正则化值(0.0到0.5之间的任意位置) 活动的规范化(类型=l1、l2或l1l2) 活动的正则化值(0.0到0.5之间的任意位置) 纪元数(纪元数,1、5或10) 要使用的优化器(ADADDelta、adam或rmsprop) 是否以及如何应用注意力(之前、之后或无) 以下是我的设置方式(第二篇

搜索空间定义的逻辑有问题

我想搜索以下内容:

  • 要使用的模型类型(功能和小时数、仅功能、仅小时数、无功能和无小时数)
  • 隐藏单位的数量(输出单位)
  • 核矩阵的正则化(类型=l1、l2或l1l2)
  • 核矩阵的正则化值(0.0到0.5之间的任意位置)
  • 活动的规范化(类型=l1、l2或l1l2)
  • 活动的正则化值(0.0到0.5之间的任意位置)
  • 纪元数(纪元数,1、5或10)
  • 要使用的优化器(ADADDelta、adam或rmsprop)
  • 是否以及如何应用注意力(之前、之后或无)
以下是我的设置方式(第二篇文章,由雅各布茨威格撰写)

我得到的错误是:

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
使用TensorFlow后端。
回溯(最近一次呼叫最后一次):
文件“Jan22Model1.py”,第374行,在
最佳=fmin(lstm_模型1,参数,算法=tpe.suggest,最大评估=5,试验=trials)
fmin中第307行的文件“/user/pkgs/anaconda2/lib/python2.7/site packages/hyperopt/fmin.py”
return\u argmin=return\u argmin,
fmin中的文件“/user/pkgs/anaconda2/lib/python2.7/site packages/hyperopt/base.py”,第635行
return\u argmin=return\u argmin)
fmin中第314行的文件“/user/pkgs/anaconda2/lib/python2.7/site packages/hyperopt/fmin.py”
pass\u expr\u memo\u ctrl=pass\u expr\u memo\u ctrl)
文件“/user/pkgs/anaconda2/lib/python2.7/site packages/hyperopt/base.py”,第776行,在__
提升重复标签(标签)
hyperopt.exceptions.DuplicateLabel:reg\u vals

但在本例中,似乎存在不会抛出错误的重复标签。我做错了什么?

我最终重组了空间,解决了问题:

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

在链接的示例中看不到任何重复的标签。尝试删除
kernel\u reg
activity\u reg
中的一个;它有用吗?
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