Quel est le but de tf.app.flags dans TensorFlow?

115

Je lis des exemples de codes dans Tensorflow, j'ai trouvé le code suivant

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

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

Mais je ne trouve pas de documentation sur cette utilisation de tf.app.flags.

Et j'ai trouvé que la mise en œuvre de ces drapeaux est tensorflow/tensorflow/python/platform/default/_flags.py

De toute évidence, cela tf.app.flagsest en quelque sorte utilisé pour configurer un réseau, alors pourquoi ne figure-t-il pas dans la documentation de l'API? Quelqu'un peut-il expliquer ce qui se passe ici?

flyaway1217
la source

Réponses:

110

Le tf.app.flagsmodule est actuellement un wrapper léger autour de python-gflags, donc la documentation de ce projet est la meilleure ressource pour savoir comment l'utiliser argparse , qui implémente un sous-ensemble de fonctionnalités dans python-gflags.

Notez que ce module est actuellement fourni pour faciliter l'écriture d'applications de démonstration et ne fait pas techniquement partie de l'API publique, il peut donc changer à l'avenir.

Nous vous recommandons d'implémenter votre propre analyse d'indicateur à l'aide de la argparsebibliothèque de votre choix .

EDIT: Le tf.app.flagsmodule n'est en fait pas implémenté en utilisant python-gflags, mais il utilise une API similaire.

mrry
la source
80
"emballé comme une commodité pour écrire des applications de démonstration, et ne fait pas techniquement partie de l'AP public" ... un peu étrange qu'il soit utilisé dans presque tous les tutoriels, mais il n'y a pas de documentation à ce sujet. Conduit à beaucoup de confusion.
speedplane
2
Pour un bon exemple d'utilisation d'argparse pour transmettre des arguments à un modèle TensorFlow et comment le regrouper dans un module Python pour le cloud, consultez task.py dans le module taxifare , qui fait partie des supports de cours training-data-analyst .
charlesreid1
3
Ne fait tf.app.runpas non plus partie de l'API publique? Parce qu'il s'appuie sur tf.app.flagset qu'il a une documentation publique ( tensorflow.org/api_docs/python/tf/app/run ), je suppose donc qu'il est public et pris en charge. S'il est recommandé d'utiliser à la argparseplace, pourriez-vous donner un bref exemple de la manière recommandée de l'utiliser avec argparse?
naktinis
6
la documentation n'est pas un problème pour tout dans tensorflow.
deadcode
37

Le tf.app.flagsmodule est une fonctionnalité fournie par Tensorflow pour implémenter des indicateurs de ligne de commande pour votre programme Tensorflow. À titre d'exemple, le code que vous avez rencontré ferait ce qui suit:

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

Le premier paramètre définit le nom de l'indicateur tandis que le second définit la valeur par défaut au cas où l'indicateur n'est pas spécifié lors de l'exécution du fichier.

Donc, si vous exécutez ce qui suit:

$ python fully_connected_feed.py --learning_rate 1.00

alors la vitesse d'apprentissage est fixée à 1,00 et restera 0,01 si l'indicateur n'est pas spécifié.

Comme mentionné dans cet article , les documents ne sont probablement pas présents, car cela pourrait être quelque chose que Google a besoin en interne pour que ses développeurs l'utilisent.

En outre, comme mentionné dans l'article, il existe plusieurs avantages à utiliser les indicateurs Tensorflow par rapport à la fonctionnalité d'indicateur fournie par d'autres packages Python, argparsenotamment lorsque vous traitez avec des modèles Tensorflow, le plus important étant que vous pouvez fournir au code des informations spécifiques à Tensorflow, telles que des informations. sur le GPU à utiliser.

Vedang Waradpande
la source
1
que dit le troisième paramètre? probablement que c'est comme une petite chaîne de doc. J'adorerais savoir si je me trompe.
shivam13juna
Oui c'est probablement ça. Je n'ai vu aucune utilisation pratique pour cela jusqu'à présent, donc je suppose que c'est pour votre compréhension.
Vedang Waradpande
11

Chez Google, ils utilisent des systèmes d'indicateurs pour définir les valeurs par défaut des arguments. C'est similaire à argparse. Ils utilisent leur propre système d'indicateurs au lieu de argparse ou sys.argv.

Source: J'y ai travaillé avant.

Ahmed
la source
5

Lorsque vous utilisez tf.app.run(), vous pouvez transférer la variable très facilement entre les threads en utilisant tf.app.flags. Voir ceci pour une utilisation ultérieure de tf.app.flags.

Cro
la source
4

Après avoir essayé plusieurs fois, j'ai trouvé cela pour imprimer toutes les clés FLAGS ainsi que la valeur réelle -

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

  print(key, FLAGS[key].value)
Nandani
la source
3
vous voulez dire FLAGS [key]
physincubus