TensorFlowのtf.app.flagsの目的は何ですか?


115

Tensorflowでいくつかのサンプルコードを読んでいますが、次のコードが見つかりました

flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
flags.DEFINE_integer('max_steps', 2000, 'Number of steps to run trainer.')
flags.DEFINE_integer('hidden1', 128, 'Number of units in hidden layer 1.')
flags.DEFINE_integer('hidden2', 32, 'Number of units in hidden layer 2.')
flags.DEFINE_integer('batch_size', 100, 'Batch size.  '
                 'Must divide evenly into the dataset sizes.')
flags.DEFINE_string('train_dir', 'data', 'Directory to put the training data.')
flags.DEFINE_boolean('fake_data', False, 'If true, uses fake data '
                 'for unit testing.')

tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py

しかし、このの使用に関するドキュメントは見つかりませんtf.app.flags

そして、私はこのフラグの実装が tensorflow/tensorflow/python/platform/default/_flags.py

明らかに、これtf.app.flagsはどういうわけかネットワークを構成するために使用されているので、なぜそれがAPIドキュメントにないのですか?誰かがここで何が起こっているのか説明できますか?

回答:


110

tf.app.flagsモジュールは現在、薄いラッパであるのpython-GFLAGSので、そのプロジェクトのドキュメントは、それを使用する方法のための最適なリソースである argparseにおける機能のサブセットを実装し、python-gflags

このモジュールは現在、デモアプリを作成するための便宜としてパッケージ化されており、技術的にはパブリックAPIの一部ではないため、将来変更される可能性があることに注意してください。

を使用して、argparseまたは任意のライブラリを使用して独自のフラグ解析を実装することをお勧めします。

EDIT:tf.app.flagsモジュールは、実際に使用して実装されていないpython-gflagsが、それは同様のAPIを使用しています。


80
「デモアプリを書くのに便利なようにパッケージ化されており、技術的にはパブリックAPの一部ではありません」...ほとんどすべてのチュートリアルで使用されているのは奇妙なことですが、ドキュメントはありません。たくさんの混乱につながります。
スピードプレーン2017年

2
argparseを使用してTensorFlowモデルに引数を渡す方法と、それをクラウドのPythonモジュールにバンドルする方法の良い例については、トレーニングデータアナリストコース資料の一部である、タクシーモジュールのtask.pyをご覧ください。。
charlesreid1

3
tf.app.runまた、パブリックAPIの一部ではありませんか?依存しtf.app.flagsており、公開ドキュメント(tensorflow.org/api_docs/python/tf/app/run)があるため、公開されてサポートされていると思います。argparse代わりに使用することが推奨されている場合、推奨される使用方法の簡単な例を教えていただけargparseますか?
naktinis

6
tensorflowのすべてのドキュメントの問題ではありません。
デッドコード'20年

37

tf.app.flagsモジュールは、あなたのTensorflowプログラムのコマンドラインフラグを実装するためにTensorflowによって提供される機能です。例として、出くわしたコードは次のことを行います。

flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')

最初のパラメーターはフラグの名前を定義し、2番目のパラメーターはファイルの実行中にフラグが指定されていない場合のデフォルト値を定義します。

したがって、次のコマンドを実行すると、

$ python fully_connected_feed.py --learning_rate 1.00

学習率は1.00に設定され、フラグが指定されていない場合は0.01のままになります。

この記事で述べたよう、開発者が使用するためにGoogleが内部的に必要とするものであるため、ドキュメントはおそらく存在しません。

また、投稿で述べたように、argparse特にTensorflowモデルを扱う場合など、他のPythonパッケージによって提供されるフラグ機能よりもTensorflowフラグを使用することにはいくつかの利点があります。最も重要なことは、情報などのコードにTensorflow固有の情報を提供できることです。使用するGPUについて。


1
3番目のパラメーターは何と言っていますか?おそらくそれは小さなドキュメント文字列のようなものです。私が間違っているかどうかを知りたいです。
shivam13juna

はい、おそらくそれだけです。今のところ実用化は見ていませんので、ご理解いただければと思います。
Vedang Waradpande

11

Googleでは、フラグシステムを使用して引数のデフォルト値を設定しています。argparseに似ています。argparseやsys.argvではなく、独自のフラグシステムを使用します。

出典:以前はそこで働いていました。


5

を使用するとtf.app.run()、を使用して、スレッド間で変数を非常に便利に転送できますtf.app.flags。の使用方法については、こちらをご覧くださいtf.app.flags


4

何度も試した後、これがすべてのFLAGSキーと実際の値を出力することがわかりました-

for key in tf.app.flags.FLAGS.flag_values_dict():

  print(key, FLAGS[key].value)

3
FLAGS [キー]を意味します
physincubus 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.