TensorFlow模型的超参数调整

20

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

如果没有这样的工具,那么我该如何实现一段代码片段来有效地运行所有不同的组合?


https://github.com/cerlymarco/keras-hypetune - Marco Cerliani
2个回答

20
尽管在版本1.2中似乎没有明确记录,但tf.contrib.learn包(包含在TensorFlow中)定义了分类器,应该与scikit-learn兼容... 但是,查看源代码,似乎需要显式设置环境变量TENSORFLOW_SKLEARN(例如设置为"1")才能实际获得此兼容性。如果这样做有效,则可以使用GridSearchCV请参见此测试用例)。

话虽如此,还有一些替代方案。我不知道是否有针对TensorFlow的特定替代方案,但是hyperopt, Scikit-OptimizeSMAC3都应该是有效的选择。MOESpearmint似乎曾经是不错的选择,但现在似乎没有得到维护。

或者,您可以尝试使用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)

请注意,在许多情况下,网格搜索可能过于昂贵而无法运行,即使仅在参数空间中进行随机搜索也可能更加高效(有关此出版物的更多信息)。

16

使用Tensorflow进行网格搜索的另一个可行(并有文献支持)选项是Ray Tune。它是一个专门用于深度学习/强化学习超参数调整的可扩展框架。

你可以在这里尝试一个快速教程。

它还通过约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]),
         })

(免责声明:我积极参与此项目!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接