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}

贡献

如果您是开发者并希望贡献,请遵循以下步骤。

设置 (基于此)

  1. 如果您还没有 GitHub 账户,请创建一个。

  2. Fork 项目仓库:点击页面顶部的 ‘Fork’ 按钮。这会在您的 GitHub 账户下创建一个代码副本。有关如何 Fork 仓库的更多详情,请参阅此指南

  3. 将您在 GitHub 账户下 Fork 的 hyperopt 仓库克隆到您的本地磁盘

bash git clone https://github.com/<github username>/hyperopt.git cd hyperopt

  1. 创建环境,使用
    $ python3 -m venv my_env$ python -m venv my_env 或 使用 conda
    $ conda create -n my_env python=3

  2. 激活环境
    $ source my_env/bin/activate
    或使用 conda
    $ conda activate my_env

  3. 安装额外依赖项(运行 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]

  1. 添加 upstream remote。这会保存主 hyperopt 仓库的引用,您可以使用它来使您的仓库与最新更改保持同步

    $ git remote add upstream https://github.com/hyperopt/hyperopt.git

    现在您应该已经成功安装 hyperopt,并且您的 git 仓库也已正确配置。接下来的步骤将介绍修改代码和提交 PR 的过程

  2. 将您的 master 分支与 upstream master 分支同步

    bash git checkout master git pull upstream master

  3. 创建一个 feature 分支来保存您的开发更改

    $ git checkout -b my_feature

    并开始进行更改。始终使用 feature 分支。永远不要在 master 分支上工作是一个好习惯!

  4. 我们建议在提交 PR 之前使用 Black 格式化您的代码,Black 在步骤 6 中会自动安装。

  5. 然后,在您提交时确保 git hooks 已激活(例如 Pycharm 有忽略它们的选项)。可以使用 pre-commit 来实现这一点,pre-commit 在步骤 6 中会自动安装,如下所示

    bash pre-commit install

    这会在您提交时自动对所有修改过的文件运行 black,如果存在需要 black 处理的文件则会失败。如果 black 没有运行,请执行以下命令

    bash black {source_file_or_directory}

  6. 在您计算机上的 feature 分支中开发该功能,使用 Git 进行版本控制。编辑完成后,使用 git add 添加更改的文件,然后使用 git commit 提交

    bash git add modified_files git commit -m "my first hyperopt commit"

  7. 此项目的测试使用 PyTest,可以通过调用 pytest 来运行。

  8. 在 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.