Какова цель tf.app.flags в TensorFlow?
Я читаю некоторые примеры кодов в Tensorflow, я нашел следующий код
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.')
в tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
Но я не могу найти никаких документов об этом использовании tf.app.flags
,
И я нашел реализацию этого флага в tensorflow/tensorflow/python/platform/default/_flags.py
Очевидно, это tf.app.flags
каким-то образом используется для настройки сети, так почему его нет в документации по API? Кто-нибудь может объяснить, что здесь происходит?
5 ответов
tf.app.flags
Модуль в настоящее время является тонкой оболочкой для python-gflags, поэтому документация для этого проекта - лучший ресурс для его использования. argparse
, который реализует подмножество функциональности в python-gflags
,
Обратите внимание, что этот модуль в настоящее время упакован для удобства написания демонстрационных приложений и технически не является частью общедоступного API, поэтому он может измениться в будущем.
Мы рекомендуем вам реализовать собственный синтаксический анализ флага, используя argparse
или любую библиотеку, которую вы предпочитаете.
РЕДАКТИРОВАТЬ: tf.app.flags
модуль фактически не реализован с использованием python-gflags
, но он использует похожий API.
tf.app.flags
Модуль - это функциональность, предоставляемая Tensorflow для реализации флагов командной строки для вашей программы Tensorflow. Например, код, с которым вы столкнулись, будет делать следующее:
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
Первый параметр определяет имя флага, а второй - значение по умолчанию, если флаг не указан при выполнении файла.
Так что, если вы запустите следующее:
$ python fully_connected_feed.py --learning_rate 1.00
тогда скорость обучения устанавливается на 1,00 и останется 0,01, если флаг не указан.
Как упоминалось в этой статье, документы, вероятно, отсутствуют, потому что это может быть то, что Google требует от своих внутренних разработчиков.
Кроме того, как упомянуто в посте, есть несколько преимуществ использования флагов Tensorflow по сравнению с функциями флагов, предоставляемыми другими пакетами Python, такими как argparse
особенно при работе с моделями Tensorflow, наиболее важным из которых является предоставление в код конкретной информации Tensorflow, такой как информация о том, какой графический процессор использовать.
В Google они используют системы флагов для установки значений по умолчанию для аргументов. Это похоже на argparse. Они используют свою собственную систему флагов вместо argparse или sys.argv.
Источник: я работал там раньше.
Когда вы используете tf.app.run()
Вы можете очень удобно передавать переменную между потоками, используя tf.app.flags
, Смотрите это для дальнейшего использования tf.app.flags
,
После многократных попыток я обнаружил, что это печатает все ключи FLAGS, а также фактическое значение -
for key in tf.app.flags.FLAGS.flag_values_dict():
print(key, FLAGS[key].value)