python - neural - ¿Cuál es el propósito de tf.app.flags en TensorFlow?
tensorflow neural network (5)
Cuando usa
tf.app.run()
, puede transferir la variable muy convenientemente entre hilos usando
tf.app.flags
.
Vea
this
para un mayor uso de
tf.app.flags
.
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 descubrí que la implementación de estas banderas está en el
tensorflow/tensorflow/python/platform/default/_flags.py
Obviamente, este
tf.app.flags
se usa de alguna manera para configurar una red, entonces, ¿por qué no está en los documentos de la API?
¿Alguien puede explicar lo que está pasando aquí?
Después de intentarlo muchas veces, encontré esto para imprimir 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)
El módulo
tf.app.flags
es actualmente una envoltura delgada alrededor de
python-gflags, por lo que la
documentación para ese proyecto
es el mejor recurso sobre cómo usarlo
argparse
, que implementa un subconjunto de la funcionalidad en
python-gflags
.
Tenga en cuenta que este módulo actualmente está empaquetado como una conveniencia para escribir aplicaciones de demostración, y técnicamente no es parte de la API pública, por lo que puede cambiar en el futuro.
Recomendamos que implemente su propio análisis de banderas utilizando
argparse
o la biblioteca que prefiera.
EDITAR:
El módulo
tf.app.flags
no se implementa de hecho usando
python-gflags
, pero usa una API similar.
El módulo
tf.app.flags
es una funcionalidad proporcionada por Tensorflow para implementar banderas 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 del indicador, mientras que el segundo define el valor predeterminado en caso de que el indicador 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 el indicador.
Como se menciona en este artículo , los documentos probablemente no estén presentes porque esto podría ser algo que Google requiere internamente para que lo usen sus desarrolladores.
Además, como se mencionó en la publicación, existen varias ventajas de usar los indicadores de Tensorflow sobre la funcionalidad de indicador proporcionada por otros paquetes de Python, como
argparse
especialmente cuando se trata de modelos de Tensorflow, siendo el más importante que puede proporcionar información específica de Tensorflow al código, como información sobre qué GPU usar.
En Google, usan sistemas de banderas para establecer valores predeterminados para los argumentos. Es similar a argparse. Usan su propio sistema de bandera en lugar de argparse o sys.argv.
Fuente: trabajé allí antes.