超参数调整为Tensorflow

时间:2017-05-25 13:13:54

标签: optimization tensorflow machine-learning bayesian hyperparameters

我正在为直接在Tensorflow(不是Keras或Tflearn)中编写的代码搜索超参数调整包。你能提出一些建议吗?

6 个答案:

答案 0 :(得分:11)

通常,您不需要将超参数优化逻辑与优化模型相结合(除非您的超级参数优化逻辑特定于您正在训练的模型类型,在这种情况下,您需要告诉我们多一点)。有几个工具和包可用于该任务。 Here是关于该主题的好文章,here是一篇更实用的博客文章,附有示例。

  • hyperopt实现了随机搜索和parzen估算器优化树。
  • Scikit-Optimize实现了其他一些功能,包括高斯过程贝叶斯优化。
  • SigOpt是一种方便的服务(付费,虽然有学生和研究人员的免费套餐和额外津贴),可用于超参数优化。它基于Yelp的MOE,它是开源的(虽然发布的版本似乎没有更新),理论上可以单独使用,虽然它需要一些额外的努力。
  • Spearmint也是一个常用的包,也是开源的,但不是免费用于商业目的(尽管你可以回到less restrictive older version)。它看起来不错,但不是非常活跃,并且可用版本与Python 3不兼容(即使已提交拉取请求以解决此问题)。
  • BayesOpt似乎是贝叶斯优化的黄金标准,但它主要是C ++,而Python界面看起来并没有很好的记录。

在这些中,我只有真的(也就是说,有一个真正的问题)在TensorFlow中使用了hyperopt,并且它没有花费太多精力。 API在某些方面有点奇怪,文档并不十分彻底,但它确实有效,似乎正在积极开发中,可能会有更多的优化算法和适应性(例如专门针对神经网络)。但是,正如先前链接的博客文章中所建议的那样,Scikit-Optimize可能同样出色,如果适合您,SigOpt看起来很容易使用。

答案 1 :(得分:4)

我想在@ jdehesa的列表中添加一个库,我已经在我的研究中应用了特别是tensorflow。它的hyper-engine,Apache 2.0许可。

它还实现了高斯过程贝叶斯优化和其他一些技术,如学习曲线预测,可以节省大量时间。

答案 2 :(得分:1)

您可以试用Ray Tune,这是一个用于缩放超参数搜索的简单库。我主要将它用于Tensorflow模型培训,但它与框架无关 - 与PyTorch,Keras等无缝协作。这是文档页面 - ray.readthedocs.io/en/latest/tune.html

您可以使用它在大约10行代码中运行分布式版本的最新算法,例如HyperBand或贝叶斯优化。

作为一次运行4个并行评估的示例:

import ray
import ray.tune as tune
from ray.tune.hyperband import HyperBandScheduler


def train_model(config, reporter):  # add the reporter parameter
    model = build_tf_model(config["alpha"], config["beta"])
    loss = some_loss_function(model)
    optimizer = tf.AdamOptimizer(loss)

    for i in range(20):
        optimizer.step()
        stats = get_statistics()
        reporter(timesteps_total=i, 
                 mean_accuracy=stats["accuracy"])

ray.init(num_cpus=4)
tune.run(train_model,
    name="my_experiment",
    stop={"mean_accuracy": 100}, 
    config={ 
        "alpha": tune.grid_search([0.2, 0.4, 0.6]), 
        "beta": tune.grid_search([1, 2]) 
    },
    scheduler=HyperBandScheduler(reward_attr="mean_accuracy"))

如果要在群集上运行此脚本,也不需要更改代码。

免责声明:我参与此项目 - 如果您有任何反馈,请与我联系!

答案 3 :(得分:0)

我不确定这是否也是您想要的参数,但是您提到了TensorFlow超参数,所以我想我可以建议一些。

尝试克隆此存储库以获取所需的脚本;

  

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

并在“主”文件夹中,调用命令提示符并运行此行;

  

python -m scripts.retrain -h

以获取可选参数的列表。

来源:https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#6

答案 4 :(得分:0)

我发现sci-kit优化非常容易用于超电流表的贝叶斯优化,并且可以与任何tensorflow API(估计器,自定义估计器,核心,keras等)一起使用

https://stackoverflow.com/a/53582472/2218905

答案 5 :(得分:0)

您可以使用变分推理(贝叶斯)作为优化空间上的点云;超参数调整会更好。张量流概率将是一种方法。