Яка мета 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
"упаковано як зручність для написання демонстраційних додатків і технічно не є частиною загальнодоступного додатку" ... якось дивно, що він використовується майже в кожному підручнику, але документації на нього немає. Приводить до великої плутанини.
швидкісний літак

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
не документація є проблемою для всього в tensorflow.
мертвий код

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
що говорить третій параметр? ймовірно, що це як невеликий рядок doc. Я хотів би дізнатися, чи не помиляюся я
shivam13juna

Так, це, мабуть, все. Я досі не бачив жодного практичного використання для цього, тому я вважаю, що це для вашого розуміння.
Веданг Варадпанде

11

В Google вони використовують системи прапорців для встановлення значень за замовчуванням для аргументів. Це схоже на аргпарз. Вони використовують власну систему прапор замість 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.