Was ist der Zweck von tf.app.flags in TensorFlow?

113

Ich lese einige Beispielcodes in Tensorflow und habe folgenden Code gefunden

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.')

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

Ich kann jedoch keine Dokumente zu dieser Verwendung von finden tf.app.flags.

Und ich fand die Implementierung dieser Flags in der tensorflow/tensorflow/python/platform/default/_flags.py

Offensichtlich wird dies tf.app.flagsirgendwie zum Konfigurieren eines Netzwerks verwendet. Warum ist es also nicht in den API-Dokumenten enthalten? Kann mir jemand erklären, was hier los ist?

flyaway1217
quelle

Antworten:

110

Das tf.app.flagsModul ist derzeit ein Thin Wrapper um Python-Gflags, daher ist die Dokumentation für dieses Projekt die beste Ressource für die Verwendung argparse , die eine Teilmenge der Funktionalität in implementiertpython-gflags .

Beachten Sie, dass dieses Modul derzeit als Annehmlichkeit für das Schreiben von Demo-Apps verpackt ist und technisch nicht Teil der öffentlichen API ist. Daher kann es sich in Zukunft ändern.

Wir empfehlen, dass Sie Ihre eigene Flag-Analyse mithilfe einer argparsebeliebigen Bibliothek implementieren .

BEARBEITEN: Das tf.app.flagsModul wird zwar nicht mit implementiert python-gflags, verwendet jedoch eine ähnliche API.

mrry
quelle
79
"Als Annehmlichkeit für das Schreiben von Demo-Apps verpackt und technisch nicht Teil des öffentlichen AP" ... seltsam, dass es in fast jedem Tutorial verwendet wird, aber es gibt keine Dokumentation dazu. Führt zu viel Verwirrung.
Speedplane
2
Ein gutes Beispiel für die Verwendung von argparse zum Übergeben von Argumenten an ein TensorFlow-Modell und zum Bündeln dieser Argumente in ein Python-Modul für die Cloud finden Sie unter task.py im Taxifare- Modul, das Teil der Kursmaterialien für Schulungsdatenanalysten ist .
Charlesreid1
3
Ist tf.app.runauch nicht Teil der öffentlichen API? Da es auf tf.app.flagsöffentlichen Dokumentationen basiert und diese hat ( tensorflow.org/api_docs/python/tf/app/run ), gehe ich davon aus, dass es öffentlich ist und unterstützt wird. Wenn die Verwendung empfohlen argparsewird, können Sie ein kurzes Beispiel für die empfohlene Verwendung geben argparse?
Naktinis
6
Ist Dokumentation nicht ein Problem für alles im Tensorflow?
Deadcode
36

Das tf.app.flagsModul ist eine von Tensorflow bereitgestellte Funktion zum Implementieren von Befehlszeilenflags für Ihr Tensorflow-Programm. Der Code, auf den Sie gestoßen sind, würde beispielsweise Folgendes tun:

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

Der erste Parameter definiert den Namen des Flags, während der zweite den Standardwert definiert, falls das Flag während der Ausführung der Datei nicht angegeben wird.

Wenn Sie also Folgendes ausführen:

$ python fully_connected_feed.py --learning_rate 1.00

dann wird die Lernrate auf 1,00 eingestellt und bleibt 0,01, wenn das Flag nicht angegeben wird.

Wie in diesem Artikel erwähnt , sind die Dokumente wahrscheinlich nicht vorhanden, da Google diese möglicherweise intern benötigt, damit seine Entwickler sie verwenden können.

Wie in diesem Beitrag erwähnt, bietet die Verwendung von Tensorflow-Flags gegenüber der Flag-Funktionalität anderer Python-Pakete mehrere Vorteile, argparseinsbesondere bei Tensorflow-Modellen. Das Wichtigste ist, dass Sie dem Code Tensorflow-spezifische Informationen wie Informationen bereitstellen können über welche GPU verwendet werden soll.

Vedang Waradpande
quelle
1
Was sagt der dritte Parameter? wahrscheinlich, dass es wie eine kleine Dokumentzeichenfolge ist. Würde gerne wissen, ob ich falsch liege.
Shivam13juna
Ja das ist es wahrscheinlich. Ich habe bisher keine praktische Verwendung dafür gesehen, also nehme ich an, es ist für Ihr Verständnis.
Vedang Waradpande
11

Bei Google verwenden sie Flaggensysteme, um Standardwerte für Argumente festzulegen. Es ist ähnlich wie Argparse. Sie verwenden ihr eigenes Flaggensystem anstelle von argparse oder sys.argv.

Quelle: Ich habe dort schon einmal gearbeitet.

Ahmed
quelle
5

Wenn Sie verwenden tf.app.run(), können Sie die Variable sehr bequem zwischen Threads mit übertragen tf.app.flags. Siehe dies für die weitere Verwendung von tf.app.flags.

Cro
quelle
4

Nachdem ich viele Male versucht hatte, fand ich dies, um alle FLAGS-Schlüssel sowie den tatsächlichen Wert zu drucken -

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

  print(key, FLAGS[key].value)
Nandani
quelle
3
du meinst FLAGGEN [Schlüssel]
Physincubus