张量流模型的超参数调整

mam*_*oku 15 python convolution hyperparameters tensorflow

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

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

jde*_*esa 18

即使它似乎没有明确记录(在版本1.2中),包tf.contrib.learn(包含在TensorFlow中)定义了应该与scikit-learn兼容的分类器......但是,看看源代码,似乎你需要显式设置环境变量TENSORFLOW_SKLEARN(例如to "1")以实际获得此兼容性.如果这样可行,则您已经可以使用GridSearchCV(请参阅此测试用例).

也就是说,有一些替代方案.我不知道任何特定的TensorFlow,但hyperopt,Scikit-OptimizeSMAC3应该都是有效的选项.MOE留兰香看起来曾经是一个很好的选择,但现在看起来似乎没有太多维护.

或者,您可以查看像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)
Run Code Online (Sandbox Code Playgroud)

但请注意,在许多情况下,网格搜索的运行成本非常高,甚至在参数空间中进行随机搜索也可能更有效(更多关于本出版物中的内容).


ric*_*iaw 13

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

你可以在这里试一下快速教程.

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

import ray
from ray import tune

def train_tf_model(config, tune_reporter):  # 1 new arg for reporting results
    # ... train here ....
    # ... train here ....
    # ... train here ....
    pass

ray.init()

tune.run(train_tf_model,
         stop={ "mean_accuracy": 100 },
         config={
            "alpha": tune.grid_search([0.2, 0.4, 0.6]),
            "beta": tune.grid_search([1, 2]),
         })
Run Code Online (Sandbox Code Playgroud)

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