Hyperopt: 分布式异步超参数优化
入门
从 PyPI 安装 hyperopt
pip install hyperopt
以运行您的第一个示例
# define an objective function
def objective(args):
case, val = args
if case == 'case 1':
return val
else:
return val ** 2
# define a search space
from hyperopt import hp
space = hp.choice('a',
[
('case 1', 1 + hp.lognormal('c1', 0, 1)),
('case 2', hp.uniform('c2', -10, 10))
])
# minimize the objective over the space
from hyperopt import fmin, tpe, space_eval
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)
print(best)
# -> {'a': 1, 'c2': 0.01420615366247227}
print(space_eval(space, best))
# -> ('case 2', 0.01420615366247227}
贡献
如果您是开发者并希望贡献,请遵循以下步骤。
设置 (基于此)
-
如果您还没有 GitHub 账户,请创建一个。
-
Fork 项目仓库:点击页面顶部的 ‘Fork’ 按钮。这会在您的 GitHub 账户下创建一个代码副本。有关如何 Fork 仓库的更多详情,请参阅此指南。
-
将您在 GitHub 账户下 Fork 的 hyperopt 仓库克隆到您的本地磁盘
bash git clone https://github.com/<github username>/hyperopt.git cd hyperopt
-
创建环境,使用
$ python3 -m venv my_env
或$ python -m venv my_env
或 使用 conda
$ conda create -n my_env python=3
-
激活环境
$ source my_env/bin/activate
或使用 conda
$ conda activate my_env
-
安装额外依赖项(运行 pytest 需要这些):Linux/UNIX:
$ pip install -e '.[MongoTrials, SparkTrials, ATPE, dev]'
或 Windows
cmd pip install -e .[MongoTrials] pip install -e .[SparkTrials] pip install -e .[ATPE] pip install -e .[dev]
-
添加 upstream remote。这会保存主 hyperopt 仓库的引用,您可以使用它来使您的仓库与最新更改保持同步
$ git remote add upstream https://github.com/hyperopt/hyperopt.git
现在您应该已经成功安装 hyperopt,并且您的 git 仓库也已正确配置。接下来的步骤将介绍修改代码和提交 PR 的过程
-
将您的 master 分支与 upstream master 分支同步
bash git checkout master git pull upstream master
-
创建一个 feature 分支来保存您的开发更改
$ git checkout -b my_feature
并开始进行更改。始终使用 feature 分支。永远不要在 master 分支上工作是一个好习惯!
-
我们建议在提交 PR 之前使用 Black 格式化您的代码,Black 在步骤 6 中会自动安装。
-
然后,在您提交时确保 git hooks 已激活(例如 Pycharm 有忽略它们的选项)。可以使用 pre-commit 来实现这一点,pre-commit 在步骤 6 中会自动安装,如下所示
bash pre-commit install
这会在您提交时自动对所有修改过的文件运行 black,如果存在需要 black 处理的文件则会失败。如果 black 没有运行,请执行以下命令
bash black {source_file_or_directory}
-
在您计算机上的 feature 分支中开发该功能,使用 Git 进行版本控制。编辑完成后,使用 git add 添加更改的文件,然后使用 git commit 提交
bash git add modified_files git commit -m "my first hyperopt commit"
-
此项目的测试使用 PyTest,可以通过调用
pytest
来运行。 -
在 Git 中记录您的更改,然后使用以下命令将更改推送到您的 GitHub 账户
bash git push -u origin my_feature
请注意,开发依赖项需要 python 3.6+。
算法
当前 hyperopt 中实现了三种算法
Hyperopt 被设计用于支持基于高斯过程和回归树的贝叶斯优化算法,但这些算法目前尚未实现。
所有算法可以通过两种方式并行化,使用
文档
Hyperopt 文档可以在这里找到,但部分内容仍托管在 wiki 上。以下是一些指向最相关页面的快速链接
相关项目
示例
请参阅 wiki 上使用 hyperopt 的项目。
公告邮件列表
讨论邮件列表
引用
如果您将此软件用于研究,请按以下方式引用论文 (http://proceedings.mlr.press/v28/bergstra13.pdf)
Bergstra, J., Yamins, D., Cox, D. D. (2013) Making a Science of Model Search: Hyperparameter Optimization in Hundreds of Dimensions for Vision Architectures. TProc. of the 30th International Conference on Machine Learning (ICML 2013),2013 年 6 月,第 I-115 至 I-23 页。
致谢
本项目获得了以下机构的支持
- 美国国家科学基金会 (IIS-0963668),
- 班廷博士后奖学金项目,
- 加拿大自然科学与工程研究理事会 (NSERC),
- D-Wave Systems, Inc.