Qual è lo scopo di tf.app.flags in TensorFlow?


115

Sto leggendo alcuni codici di esempio in Tensorflow, ho trovato il seguente codice

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

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

Ma non riesco a trovare alcun documento su questo utilizzo di tf.app.flags.

E ho scoperto che l'implementazione di questo flag è in tensorflow/tensorflow/python/platform/default/_flags.py

Ovviamente, questo tf.app.flagsè in qualche modo utilizzato per configurare una rete, quindi perché non è nei documenti API? Qualcuno può spiegare cosa sta succedendo qui?

Risposte:


110

Il tf.app.flagsmodulo è attualmente un sottile involucro attorno a python-gflags, quindi la documentazione per quel progetto è la migliore risorsa su come usarlo argparse , che implementa un sottoinsieme della funzionalità in python-gflags.

Tieni presente che questo modulo è attualmente confezionato come comodità per la scrittura di app demo e non fa tecnicamente parte dell'API pubblica, quindi potrebbe cambiare in futuro.

Ti consigliamo di implementare la tua analisi dei flag utilizzando argparseo qualsiasi libreria preferisci.

EDIT: Il tf.app.flagsmodulo non è infatti implementato utilizzando python-gflags, ma utilizza un'API simile.


80
"confezionato come comodità per la scrittura di app demo, e tecnicamente non fa parte dell'AP pubblico" ... un po 'strano che sia usato in quasi tutti i tutorial, ma non c'è documentazione su di esso. Porta a molta confusione.
speedplane

2
Per un buon esempio di come utilizzare argparse per passare argomenti a un modello TensorFlow e di come raggrupparlo in un modulo Python per il cloud, vedere task.py nel modulo taxifare , parte dei materiali del corso training-data-analyst .
charlesreid1

3
E ' tf.app.run, inoltre, non parte della API pubblica? Perché si basa su tf.app.flagse ha una documentazione pubblica ( tensorflow.org/api_docs/python/tf/app/run ), quindi presumo che sia pubblico e supportato. Se invece si consiglia di utilizzarlo argparse, potresti fornire un breve esempio del modo consigliato di utilizzarlo con argparse?
naktinis

6
la documentazione non è un problema per tutto in tensorflow.
deadcode

37

Il tf.app.flagsmodulo è una funzionalità fornita da Tensorflow per implementare i flag della riga di comando per il programma Tensorflow. Ad esempio, il codice che hai trovato avrebbe fatto quanto segue:

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

Il primo parametro definisce il nome del flag mentre il secondo definisce il valore predefinito nel caso in cui il flag non venga specificato durante l'esecuzione del file.

Quindi, se esegui quanto segue:

$ python fully_connected_feed.py --learning_rate 1.00

quindi la velocità di apprendimento è impostata su 1,00 e rimarrà 0,01 se il flag non è specificato.

Come accennato in questo articolo , i documenti probabilmente non sono presenti perché questo potrebbe essere qualcosa che Google richiede internamente per i suoi sviluppatori da utilizzare.

Inoltre, come accennato nel post, ci sono diversi vantaggi nell'usare i flag di Tensorflow rispetto alla funzionalità dei flag forniti da altri pacchetti Python, come argparsespecialmente quando si tratta di modelli Tensorflow, il più importante è che puoi fornire informazioni specifiche a Tensorflow al codice come le informazioni su quale GPU utilizzare.


1
cosa dice il terzo parametro? probabilmente è come una piccola stringa di documenti. Mi piacerebbe sapere se mi sbaglio.
shivam13juna

Sì, probabilmente è così. Finora non ne ho visto alcun uso pratico, quindi suppongo che sia per la tua comprensione.
Vedang Waradpande

11

In Google, usano i sistemi di flag per impostare i valori predefiniti per gli argomenti. È simile ad argparse. Usano il proprio sistema di flag invece di argparse o sys.argv.

Fonte: ho lavorato lì prima.


5

Quando si utilizza tf.app.run(), è possibile trasferire la variabile molto comodamente tra i thread utilizzando tf.app.flags. Vedi questo per un ulteriore utilizzo di tf.app.flags.


4

Dopo aver provato molte volte ho trovato questo per stampare tutta la chiave FLAGS e il valore effettivo -

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

  print(key, FLAGS[key].value)

3
vuoi dire BANDIERE [chiave]
physincubus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.