Estou lendo alguns códigos de exemplo no Tensorflow, encontrei o seguinte 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.')
no tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
Mas não consigo encontrar nenhum documento sobre o uso de tf.app.flags
.
E descobri que a implementação dessas sinalizações está no
tensorflow/tensorflow/python/platform/default/_flags.py
Obviamente, isso tf.app.flags
é de alguma forma usado para configurar uma rede, então por que não está nos documentos da API? Alguém pode explicar o que está acontecendo aqui?
fonte
tf.app.run
também não faz parte da API pública? Porque ele dependetf.app.flags
e tem documentação pública ( tensorflow.org/api_docs/python/tf/app/run ), então presumo que seja público e com suporte. Se for recomendado o usoargparse
, você poderia fornecer um breve exemplo da maneira recomendada de usá-lo comargparse
?O
tf.app.flags
módulo é uma funcionalidade fornecida pelo Tensorflow para implementar sinalizadores de linha de comando para seu programa Tensorflow. Como exemplo, o código que você encontrou faria o seguinte:O primeiro parâmetro define o nome do sinalizador, enquanto o segundo define o valor padrão caso o sinalizador não seja especificado durante a execução do arquivo.
Portanto, se você executar o seguinte:
então, a taxa de aprendizagem é definida como 1,00 e permanecerá 0,01 se o sinalizador não for especificado.
Conforme mencionado neste artigo , os documentos provavelmente não estão presentes porque isso pode ser algo que o Google exige internamente para seus desenvolvedores usarem.
Além disso, conforme mencionado na postagem, há várias vantagens em usar sinalizadores do Tensorflow em vez da funcionalidade de sinalização fornecida por outros pacotes Python, como
argparse
especialmente ao lidar com modelos do Tensorflow, sendo o mais importante que você pode fornecer informações específicas do Tensorflow para o código, como informações sobre qual GPU usar.fonte
No Google, eles usam sistemas de sinalização para definir valores padrão para argumentos. É semelhante a argparse. Eles usam seu próprio sistema de sinalização em vez de argparse ou sys.argv.
Fonte: Já trabalhei lá antes.
fonte
Quando você usa
tf.app.run()
, você pode transferir a variável de forma muito conveniente entre threads usandotf.app.flags
. Veja isto para uso posterior detf.app.flags
.fonte
Depois de tentar várias vezes, descobri que isso imprimia todas as chaves FLAGS, bem como o valor real -
fonte