Python SMAC对小批量模式

时间:2018-04-01 11:44:22

标签: python python-3.x machine-learning hyperparameters automl

我尝试使用SMAC v3进行超参数优化。

我希望使用目标函数固定数量 tae_runner )计算来限制优化过程,并在" mini-batch&#34中运行它;模式:
首先,我用一些预算运行SMAC,然后我再添加一些,并从停止的地方开始继续。

如何确定此计算预算的合理大小?
让我解释下面的问题:

我的目标功能相当昂贵,可能需要1-10秒才能计算甚至更多。因此,我决定使用迷你批量广告执行一些额外的步骤,这些步骤特定于我的问题。

budget = .. # 1? 10? 100? 1000? 10000?
total_limit = budget
my_scenario = Scenario({"run_obj": "quality",
                        "cs": my_configuratoin_space
                        "runcount_limit": total_limit
                        })
smac = SMAC(scenario=my_scenario, rng=42, tae_runner=my_target_function)
best_configuration = self.smac.optimize()


# when I decide to continue running:  
total_limit += budget
my_scenario = Scenario({"run_obj": "quality",
                        "cs": my_configuratoin_space,
                        "runcount-limit": total_limit
                        })
smac.stats._Stats__scenario = my_scenario
better_configuration = smac.optimize()   

此代码似乎有效。以下是我在docs中找到的内容:

  

wallclock_limit, runco​​unt_limit 和tuner-timeout用于控制   最大wallclock-time,算法调用次数和使用的cpu-time   分别用于优化。

据我所知,从存储库中的代码可以看出,此代码的工作原理如下:

1)SMAC包装SMBO并将Scenario和其他参数传递给它。

2)有main SMBO loop,它不断产生新的挑战者(恰好是10K,包括交错randoms):

challengers = self.choose_next(X, Y)

并将它们与现任(迄今为止找到的最佳配置)进行比较:

self.incumbent, inc_perf = self.intensifier.intensify(
    challengers=challengers,
    ...
    time_bound=max(self.intensifier._min_time, time_left))

这里的 time_bound 是什么,如果我只设置 runco​​unt_limit ,顺便说一下?

3)如果超出预算,主smbo循环退出:

    if self.stats.is_budget_exhausted():
        break

其他挑战者,即生成,成本预测和分类,只是放弃了。

我关注的是以下: 如果runco​​unt_limit值太小,例如110或类似的东西,它可能会浪费大量资源来生成,排序和丢弃大量配置(5K)以及开销为每个小批量启动和停止smac 另一方面,如果我将 runco​​unt_limit 设置为10K的倍数,则不再是小批量。

您能否建议一种方法来确定这些批次的大小?

0 个答案:

没有答案