【问题标题】:Python: Alternative to hyperopt that can support multiprocessing?Python:可以支持多处理的 hyperopt 的替代品?
【发布时间】:2018-08-28 15:33:05
【问题描述】:

除了HyperOpt 之外,还有其他可以支持多处理以进行超参数搜索的吗?我知道HyperOpt可以配置为使用MongoDB,但是好像很容易搞错,在杂草丛中呆上一个星期,有什么更流行更有效的吗?

【问题讨论】:

标签: python mongodb deep-learning hyperparameters


【解决方案1】:

查看 Ray Tune!

您可以将它用于随机搜索、网格搜索和进化方法的多处理和多机器执行。它还具有流行算法的实现,例如 HyperBand。

这是文档页面 - ray.readthedocs.io/en/latest/tune.html

以一次运行 4 个并行实验为例:

import ray
import ray.tune as tune


def my_func(config, reporter):  # add the reporter parameter
    import time, numpy as np
    i = 0
    while True:
        reporter(timesteps_total=i, 
                 mean_accuracy=i ** config["alpha"])
        i += 1
        time.sleep(.01)


tune.register_trainable("my_func", my_func)
ray.init(num_cpus=4)
tune.run_experiments({
    "my_experiment": { 
        "run": "my_func", 
        "stop": { "mean_accuracy": 100 }, 
        "config": { 
            "alpha": tune.grid_search([0.2, 0.4, 0.6]), 
            "beta": tune.grid_search([1, 2]) } } })

免责声明:我从事这个项目 - 如果您有任何反馈,请告诉我!

【讨论】:

  • 我相信 ray 不适用于 Windows,你同意吗?
  • 我尝试运行它 1000 次,我发现给出的示例开销更大。如果您仅使用分布式训练,可能会很有用
【解决方案2】:

一些模型(比如 RandomForest)有“njobs”参数用于使用核心数。你可以试试 njobs=-1;因此即使 hyperopt 使用 1 个核心,每次试验也会使用所有核心,从而加快进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2011-01-16
    • 2015-08-08
    • 1970-01-01
    • 2010-11-21
    • 2011-03-08
    相关资源
    最近更新 更多