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.flags
se usa de alguna manera para configurar una red, entonces, ¿por qué no está en los documentos API? ¿Alguien puede explicar qué está pasando aquí?
fuente
tf.app.run
Tampoco forma parte de la API pública? Debido a que se basa entf.app.flags
y tiene documentación pública ( tensorflow.org/api_docs/python/tf/app/run ), asumo que es público y compatible. Si se recomienda usarloargparse
en su lugar, ¿podría proporcionar un breve ejemplo de la forma recomendada de usarloargparse
?El
tf.app.flags
mó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: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:
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
argparse
especialmente 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.fuente
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.
fuente
Cuando lo usa
tf.app.run()
, puede transferir la variable de manera muy conveniente entre subprocesos usandotf.app.flags
. Consulte esto para obtener más información sobre el uso detf.app.flags
.fuente
Después de intentarlo muchas veces, encontré que esto imprime todas las claves de BANDERAS, así como el valor real:
fuente