web-dev-qa-db-ja.com

Tensorflowモデルのハイパーパラメーターチューニング

モデルのハイパーパラメーターを最適化するために以前にScikit-learnのGridSearchCVを使用しましたが、Tensorflowのハイパーパラメーターを最適化するための同様のツールが存在するのではないかと考えています(たとえばエポック数、学習率、スライディングウィンドウサイズなど

そうでない場合、すべての異なる組み合わせを効果的に実行するスニペットを実装するにはどうすればよいですか?

12
mamafoku

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]),
         })

(免責事項:私はこのプロジェクトに積極的に貢献しています!)

12
richliaw

(バージョン1.2で)明示的に文書化されていないように見えますが、パッケージ tf.contrib.learn (TensorFlowに含まれています)はscikit-learnと互換性があるはずの分類子を定義します...ただし、 ソース を見ると、実際にこの互換性を得るには、環境変数TENSORFLOW_SKLEARN(たとえば"1")を明示的に設定する必要があるようです。これが機能する場合は、すでにGridSearchCVを使用できます( このテストケースを参照 )。

とはいえ、いくつかの選択肢があります。 TensorFlowに固有のものは知りませんが、 hyperoptScikit-Optimize または SMAC はすべて有効なオプションである必要があります。 [〜#〜] 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)

ただし、グリッド検索は多くの場合実行するのに非常に高価になる可能性があり、パラメーター空間でランダム検索を行うだけでもおそらくより効率的であることに注意してください(詳細については この出版物 )。

17
jdehesa