Hyperopt 在执行过程中设置超时并修改空间

问题描述 投票:0回答:3

如果有人可以帮忙:

  1. 如何为每个单独的测试设置超时?整个实验超时?
  2. 如何设置渐进策略,在实验的不同阶段(同时使用当前的优化算法)消除/修剪搜索空间中最差得分分支的百分比? IE。在最大总实验的 30% 时,它可以删除 50% 得分最差的分类器及其所有超参数分支,以将其从即将进行的测试中删除。然后,同样的过程在 60%...

非常感谢!

optimization machine-learning scikit-learn deep-learning
3个回答
5
投票

以下是我在 hyperopt 的 github 上的交流:

  1. 没有每次试验超时,但 hyperopt-sklearn 通过仅包装函数来实现自己的解决方案。请在 https://github.com/hyperopt/hyperopt-sklearn/ 查找“fn_with_timeout”。

  2. 来自问题 210:“优化器是无状态的,fmin 将实验的所有状态存储在试验对象中。因此,如果从试验对象中删除一些实验,就好像它们从未发生过一样。使用 fmin 的“max_evals”参数根据您需要进行此类修改的频率来中断搜索。如果您想要真正细粒度的控制,那么使用重复调用应该没问题,例如 max_evals 每次增加 1。”


1
投票

感谢您对此进行调查,@doxav。我编写了一些解决问题 1 的代码,从

fn_with_timeout
获取
hyperopt-sklearn
的一部分,并将其调整为标准 Hyperopt 成本函数。

您可以在这里找到它: https://gist.github.com/hunse/247d91d14aaa8f32b24533767353e35d


0
投票

要为整个实验设置超时,如果您正在使用 Spark Trials(如此处所述),则可以使用超时参数。文档说“timeout:fmin()可以运行的最大时间(以秒为单位)。默认没有最大时间限制。”

 from hyperopt import SparkTrials  
trials = SparkTrials(parallelism = 20, timeout= 1800)

现在使用运行中的试验:

 with mlflow.start_run():
   argmin = fmin(
    fn=objective,
    space=search_space,
    algo=algo,
    max_evals=16,
    trials=spark_trials)
© www.soinside.com 2019 - 2024. All rights reserved.