¿Cuál es el propósito de tf.app.flags en TensorFlow?

115

Estoy leyendo algunos códigos de ejemplo en Tensorflow, encontré el siguiente código

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

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

Pero no puedo encontrar ningún documento sobre este uso de tf.app.flags.

Y encontré que la implementación de estas banderas está en el tensorflow/tensorflow/python/platform/default/_flags.py

Obviamente, esto tf.app.flagsse usa de alguna manera para configurar una red, entonces, ¿por qué no está en los documentos API? ¿Alguien puede explicar qué está pasando aquí?

flyaway1217
fuente

Respuestas:

110

Actualmente, el tf.app.flagsmódulo es una envoltura delgada alrededor de python-gflags, por lo que la documentación de ese proyecto es el mejor recurso para saber cómo usarlo argparse , que implementa un subconjunto de la funcionalidad en python-gflags.

Tenga en cuenta que este módulo está empaquetado actualmente como una conveniencia para escribir aplicaciones de demostración y no es técnicamente parte de la API pública, por lo que puede cambiar en el futuro.

Le recomendamos que implemente su propio análisis de indicadores utilizando argparseo cualquier biblioteca que prefiera.

EDITAR: De hecho, el tf.app.flagsmódulo no se implementa usando python-gflags, pero usa una API similar.

señor
fuente
80
"empaquetado como una conveniencia para escribir aplicaciones de demostración, y técnicamente no es parte del AP público" ... un poco extraño que se use en casi todos los tutoriales, pero no hay documentación al respecto. Lleva a mucha confusión.
Speedplane
2
Para ver un buen ejemplo de cómo usar argparse para pasar argumentos a un modelo de TensorFlow y cómo agruparlo en un módulo de Python para la nube, consulte task.py en el módulo taxifare , parte de los materiales del curso training-data- analyst .
charlesreid1
3
¿ tf.app.runTampoco forma parte de la API pública? Debido a que se basa en tf.app.flagsy tiene documentación pública ( tensorflow.org/api_docs/python/tf/app/run ), asumo que es público y compatible. Si se recomienda usarlo argparseen su lugar, ¿podría proporcionar un breve ejemplo de la forma recomendada de usarlo argparse?
naktinis
6
no es la documentación un problema para todo en tensorflow.
código muerto
37

El tf.app.flagsmódulo es una funcionalidad proporcionada por Tensorflow para implementar marcas de línea de comando para su programa Tensorflow. Como ejemplo, el código que encontró haría lo siguiente:

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

El primer parámetro define el nombre de la bandera, mientras que el segundo define el valor predeterminado en caso de que la bandera no se especifique al ejecutar el archivo.

Entonces, si ejecuta lo siguiente:

$ python fully_connected_feed.py --learning_rate 1.00

entonces la tasa de aprendizaje se establece en 1.00 y seguirá siendo 0.01 si no se especifica la bandera.

Como se menciona en este artículo , es probable que los documentos no estén presentes porque esto podría ser algo que Google requiera internamente para que lo utilicen sus desarrolladores.

Además, como se mencionó en la publicación, existen varias ventajas de usar indicadores de Tensorflow sobre la funcionalidad de indicador proporcionada por otros paquetes de Python, como argparseespecialmente cuando se trata de modelos de Tensorflow, la más importante es que puede proporcionar información específica de Tensorflow al código, como información. sobre qué GPU usar.

Vedang Waradpande
fuente
1
¿Qué dice el tercer parámetro? probablemente sea como una pequeña cadena de documentos. Me encantaría saber si me equivoco.
shivam13juna
Sí, probablemente sea eso. No le he visto ningún uso práctico hasta ahora, así que supongo que es para su comprensión.
Vedang Waradpande
11

En Google, utilizan sistemas de banderas para establecer valores predeterminados para los argumentos. Es similar a argparse. Usan su propio sistema de banderas en lugar de argparse o sys.argv.

Fuente: trabajé allí antes.

Ahmed
fuente
5

Cuando lo usa tf.app.run(), puede transferir la variable de manera muy conveniente entre subprocesos usando tf.app.flags. Consulte esto para obtener más información sobre el uso de tf.app.flags.

Cro
fuente
4

Después de intentarlo muchas veces, encontré que esto imprime todas las claves de BANDERAS, así como el valor real:

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

  print(key, FLAGS[key].value)
Nandani
fuente
3
te refieres a BANDERAS [clave]
physincubus