Какова цель tf.app.flags в TensorFlow?


115

Я читаю несколько примеров кодов в 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? Кто-нибудь может объяснить, что здесь происходит?

Ответы:


110

В tf.app.flagsнастоящее время модуль представляет собой тонкую оболочку вокруг python-gflags, поэтому документация для этого проекта - лучший ресурс для того, как его использовать argparse , который реализует подмножество функций в python-gflags.

Обратите внимание, что этот модуль в настоящее время упакован для удобства написания демонстрационных приложений и технически не является частью общедоступного API, поэтому он может измениться в будущем.

Мы рекомендуем вам реализовать собственный синтаксический анализ флагов с помощью argparseлюбой библиотеки, которую вы предпочитаете.

EDIT:tf.app.flags модуль фактически не реализован с использованием python-gflags, но он использует подобный API.


80
«упакован для удобства написания демонстрационных приложений и технически не является частью общедоступной точки доступа» ... странно, что он используется почти в каждом учебнике, но по нему нет документации. Вводит в заблуждение.
Speedplane

2
Хороший пример того, как использовать argparse для передачи аргументов модели TensorFlow и как объединить его в модуль Python для облака, можно найти в task.py в модуле taxifare , который входит в материалы курса обучения аналитике данных. .
charlesreid1

3
Является tf.app.runтакже не является частью общественного API? Поскольку он полагается на tf.app.flagsобщедоступную документацию ( tensorflow.org/api_docs/python/tf/app/run ) и имеет ее , я предполагаю, что она общедоступна и поддерживается. Если его рекомендуется использовать argparse, не могли бы вы привести краткий пример рекомендуемого способа его использования argparse?
naktinis

6
Документация не является проблемой для всего в тензорном потоке.
дедкод

37

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 в код, такую ​​как информация о том, какой GPU использовать.


1
что говорит третий параметр? вероятно, что это похоже на небольшую строку документа. Хотел бы знать, ошибаюсь ли я.
shivam13juna

Да, наверное, так. Я пока не видел в этом практического применения, так что полагаю, для вашего понимания.
Vedang Waradpande

11

В Google они используют системы флагов для установки значений по умолчанию для аргументов. Это похоже на argparse. Они используют свою собственную систему флагов вместо argparse или sys.argv.

Источник: Я работал там раньше.


5

Когда вы используете tf.app.run(), вы можете очень удобно передавать переменную между потоками, используя tf.app.flags. См. Это для дальнейшего использования tf.app.flags.


4

После многих попыток я обнаружил, что это печатает все ключи FLAGS, а также фактическое значение -

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

  print(key, FLAGS[key].value)

3
вы имеете в виду ФЛАГИ [ключ]
Physincubus
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.