Tensorflow 模型的超参数调优

Posted

技术标签:

【中文标题】Tensorflow 模型的超参数调优【英文标题】:Hyperparameter Tuning of Tensorflow Model 【发布时间】:2017-12-01 20:16:37 【问题描述】:

我之前使用过 Scikit-learn 的 GridSearchCV 来优化我的模型的超参数,但只是想知道是否存在类似的工具来优化 Tensorflow 的超参数(例如 时期数、学习率、滑动窗口大小等.)

如果没有,我如何实现一个有效运行所有不同组合的 sn-p?

【问题讨论】:

github.com/cerlymarco/keras-hypetune 【参考方案1】:

使用 Tensorflow 进行网格搜索的另一个可行(且已记录)选项是 Ray Tune。它是一个可扩展的超参数调整框架,特别适用于深度学习/强化学习。

你可以试试a fast tutorial here。

它还在大约 10 行 Python 代码中处理了 Tensorboard 日志记录和高效搜索算法(即HyperOpt 集成和HyperBand)。

from ray import tune

def train_tf_model(config):  
    for i in range(num_epochs):
        accuracy = train_one_epoch(model)
        tune.report(acc=accuracy)

tune.run(train_tf_model,
         config=
            "alpha": tune.grid_search([0.2, 0.4, 0.6]),
            "beta": tune.grid_search([1, 2]),
         )

(免责声明:我为这个项目做出了积极的贡献!)

【讨论】:

【参考方案2】:

尽管似乎没有明确记录(在 1.2 版中),包 tf.contrib.learn(包含在 TensorFlow 中)定义了应该与 scikit-learn 兼容的分类器......但是,查看 @987654322 @,看来您需要显式设置环境变量TENSORFLOW_SKLEARN(例如设置为"1")才能真正获得这种兼容性。如果可行,您已经可以使用GridSearchCV (see this test case)。

也就是说,有几种选择。我不知道任何特定于 TensorFlow 的信息,但 hyperopt、Scikit-Optimize 或 SMAC3 都应该是有效的选项。 MOE 和 Spearmint 看起来曾经是不错的选择,但现在似乎不太维护。

或者,您可以查看SigOpt(MOE 原作者的公司)之类的服务。

编辑

关于运行所有可能的参数组合,核心逻辑,如果你想自己实现,其实并不复杂。您可以只定义具有每个参数的可能值的列表,然后使用itertools.product 运行所有组合。比如:

from itertools import product

param1_values = [...]
param2_values = [...]
param3_values = [...]
for param1, param2, param3 in product(param1_values, param2_values param3_values):
    run_experiment(param1, param2, param3)

但是请注意,在许多情况下运行网格搜索可能会非常昂贵,即使只是在参数空间中进行随机搜索也可能会更有效(更多关于 in this publication)。

【讨论】:

以上是关于Tensorflow 模型的超参数调优的主要内容,如果未能解决你的问题,请参考以下文章

深度学习之 TensorFlow模型优化和调优实例

深度学习之 TensorFlow模型优化和调优实例

Pytorch 模型的超参数优化

scikit-learn 中的超参数优化(网格搜索)

R语言使用caret包对GBM模型参数调优SVM模型自定义参数调优RDF模型自定义参数调优(例如,ROC)重采样对多个模型的性能差异进行统计描述可视化多模型在多指标下的性能对比分析

机器学习超参数调优