web-dev-qa-db-ja.com

Tensorflowのハイパーパラメータ調整

Tensorflowで直接記述されたコード(KerasやTflearnではない)のハイパーパラメーター調整パッケージを探しています。何か提案をいただけますか?

9
Mark

通常、ハイパーパラメータ最適化ロジックを最適化されたモデルと組み合わせる必要はありません(ハイパーパラメータ最適化ロジックがトレーニングしているモデルの種類に固有である場合を除きます。その場合は、もう少し詳しく説明する必要があります)。このタスクに使用できるツールとパッケージがいくつかあります。 Here はこのトピックに関する優れた論文であり、 here は例を含むより実用的なブログ投稿です。

  • hyperopt ランダム検索とカーネル推定量の最適化を実装します。
  • Scikit-Optimize ガウス過程ベイズ最適化を含む他のいくつかを実装します。
  • SigOpt は、ハイパーパラメータの最適化に便利なサービスです(有料ですが、無料枠と学生と研究者のための追加の手当があります)。これはYelpの [〜#〜] moe [〜#〜] に基づいており、オープンソースであり(公開されたバージョンはあまり更新されていないようですが)、理論的にはそれはいくつかの追加の努力が必要ですが、それ自体。
  • スペアミント も一般的に参照されているパッケージであり、オープンソースでもありますが、商用目的では無料ではありません(ただし、 制限の少ない古いバージョン にフォールバックできます)。見た目は良いですが、あまりアクティブではなく、利用可能なバージョンはPython 3と互換性がありません(それを修正するためにプルリクエストが送信されたとしても)。
  • BayesOpt はベイズ最適化のゴールデンスタンダードのようですが、主にC++であり、Pythonインターフェイスはあまり文書化されていないようです。

これらのうち、私は本当に(つまり、実際の問題で)TensorFlowでhyperoptを使用しただけで、それほど手間はかかりませんでした。 APIはいくつかの点で少し奇妙であり、ドキュメントはそれほど完全ではありませんが、それは機能し、活発に開発されているようで、より多くの最適化アルゴリズムと適応(特にニューラルネットワーク用)が来る可能性があります。ただし、以前にリンクされたブログ投稿で示唆されているように、Scikit-Optimizeはおそらく同じくらい優れており、SigOptは自分に合っていれば非常に使いやすいように見えます。

12
jdehesa

@jdehesaのリストにもう1つのライブラリを追加したいと思います。これは、特にテンソルフローを使用した研究で適用しました。 hyper-engine 、Apache2.0ライセンスです。

また、ガウス過程ベイズ最適化や、学習曲線予測など、多くの時間を節約するその他の手法も実装しています。

4
Maxim

ハイパーパラメータ検索をスケーリングするためのシンプルなライブラリであるRayTuneを試すことができます。私は主にTensorflowモデルのトレーニングに使用しますが、フレームワークにとらわれず、PyTorch、Kerasなどとシームレスに連携します。ドキュメントページは次のとおりです ray.readthedocs.io/en/latest/tune.html

これを使用して、 HyperBand やベイズ最適化などの最先端のアルゴリズムの分散バージョンを約10行のコードで実行できます。

一度に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"))

このスクリプトをクラスターで実行する場合も、コードを変更する必要はありません。

免責事項:私はこのプロジェクトに取り組んでいます-フィードバックがあれば教えてください!

1
richliaw

これが必要なパラメーターでもあるかどうかはわかりませんが、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

0
Infinite Loops

Sci-kit最適化は、ハイパーアメーターのベイズ最適化に非常に簡単に使用でき、任意のテンソルフローAPI(推定器、カスタム推定器、コア、ケラなど)で機能することがわかりました。

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

0
Jason

変分推論(ベイズ)を最適化空間上の点群として使用できます。ハイパーパラメータの調整ははるかに優れています。 Tensorflowの確率がアプローチになります。

0
emmanuel