Hyperopt:定义搜索 space
Hyperopt: defining search space
我在搜索 space 定义的逻辑方面遇到问题。
我想搜索这些:
- 要使用的模型类型(features_and_hours、features_only、hours_only、no_features_no_hours)
- 隐藏单元数(output_units)
- 内核矩阵的正则化(类型 = l1、l2 或 l1l2)
- 内核矩阵的正则化值(从 0.0 到 0.5 的任何值)
- 活动的正则化(类型 = l1、l2 或 l1l2)
- 活动的正则化值(从 0.0 到 0.5 之间的任何值)
- 纪元数(num_epochs,1、5 或 10)
- 要使用的优化器(adadelta、adam 或 rmsprop)
- 是否以及如何应用注意力(之前、之后或 none)
这是我的设置方式,遵循 this example(页面上的第二个 post,by 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
但在示例中,似乎存在不会引发错误的重复标签。我做错了什么?
我最终重组了 space,解决了问题:
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
我在搜索 space 定义的逻辑方面遇到问题。
我想搜索这些:
- 要使用的模型类型(features_and_hours、features_only、hours_only、no_features_no_hours)
- 隐藏单元数(output_units)
- 内核矩阵的正则化(类型 = l1、l2 或 l1l2)
- 内核矩阵的正则化值(从 0.0 到 0.5 的任何值)
- 活动的正则化(类型 = l1、l2 或 l1l2)
- 活动的正则化值(从 0.0 到 0.5 之间的任何值)
- 纪元数(num_epochs,1、5 或 10)
- 要使用的优化器(adadelta、adam 或 rmsprop)
- 是否以及如何应用注意力(之前、之后或 none)
这是我的设置方式,遵循 this example(页面上的第二个 post,by 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
但在示例中,似乎存在不会引发错误的重复标签。我做错了什么?
我最终重组了 space,解决了问题:
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