Jaki jest cel tf.app.flags w TensorFlow?

115

Czytam przykładowe kody w Tensorflow, znalazłem następujący kod

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.')

w tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py

Ale nie mogę znaleźć żadnych dokumentów dotyczących tego użycia tf.app.flags.

I znalazłem implementację tych flag w tensorflow/tensorflow/python/platform/default/_flags.py

Oczywiście tf.app.flagsjest to w jakiś sposób używane do konfigurowania sieci, więc dlaczego nie ma tego w dokumentacji API? Czy ktoś może wyjaśnić, co się tutaj dzieje?

flyaway1217
źródło

Odpowiedzi:

110

tf.app.flagsModuł jest obecnie cienka owijka wokół python-GFlags, więc dokumentacja dla tego projektu jest najlepszym źródłem, jak go używać argparse , który realizuje podzbiór funkcjonalności python-gflags.

Należy pamiętać, że ten moduł jest obecnie pakowany jako udogodnienie do pisania aplikacji demonstracyjnych i nie jest technicznie częścią publicznego interfejsu API, więc może się zmienić w przyszłości.

Zalecamy zaimplementowanie własnego analizowania flag przy użyciu argparselub dowolnej preferowanej biblioteki.

EDIT:tf.app.flags moduł nie jest w rzeczywistości realizowana przy użyciu python-gflags, ale używa podobnego API.

mrry
źródło
80
„spakowany jako udogodnienie do pisania aplikacji demonstracyjnych i technicznie nie jest częścią publicznego AP” ... trochę dziwne, że jest używany w prawie każdym samouczku, ale nie ma na nim dokumentacji. Prowadzi do wielu nieporozumień.
szybowiec
2
Dobry przykład, jak używać argparse do przekazywania argumentów do modelu TensorFlow i jak połączyć go w moduł Python dla chmury, zobacz task.py w module taxifare , część materiałów szkoleniowych dla analityków danych szkoleniowych .
charlesreid1
3
Czy tf.app.runrównież nie jest częścią publicznego interfejsu API? Ponieważ opiera się tf.app.flagsi ma publiczną dokumentację ( tensorflow.org/api_docs/python/tf/app/run ), więc zakładam, że jest publiczna i obsługiwana. Jeśli argparsezamiast tego zaleca się użycie , czy możesz podać krótki przykład zalecanego sposobu korzystania z niego argparse?
naktinis
6
dokumentacja nie jest problemem dla wszystkiego w tensorflow.
deadcode
37

tf.app.flagsModuł jest funkcjonalność zapewnia Tensorflow wdrożyć flagi wiersza poleceń dla programu Tensorflow. Na przykład, napotkany kod wykonałby następujące czynności:

flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')

Pierwszy parametr określa nazwę flagi, podczas gdy drugi definiuje wartość domyślną w przypadku, gdy flaga nie zostanie określona podczas wykonywania pliku.

Więc jeśli uruchomisz następujące:

$ python fully_connected_feed.py --learning_rate 1.00

wtedy współczynnik uczenia się jest ustawiony na 1,00 i pozostanie 0,01, jeśli flaga nie zostanie określona.

Jak wspomniano w tym artykule , dokumenty prawdopodobnie nie są obecne, ponieważ może to być coś, czego Google wymaga wewnętrznie, aby mogli z niego korzystać programiści.

Ponadto, jak wspomniano w poście, istnieje kilka zalet używania flag Tensorflow w porównaniu z funkcjonalnością flag dostarczaną przez inne pakiety Pythona, na przykład argparseszczególnie w przypadku modeli Tensorflow, z których najważniejszą jest to, że możesz dostarczyć do kodu specyficzne informacje Tensorflow, takie jak informacje o tym, którego GPU użyć.

Vedang Waradpande
źródło
1
co mówi trzeci parametr? prawdopodobnie to jest jak mały dokument. Chciałbym wiedzieć, czy się mylę.
shivam13juna
Tak, to prawdopodobnie to. Jak dotąd nie widziałem żadnego praktycznego zastosowania, więc przypuszczam, że jest to dla twojego zrozumienia.
Vedang Waradpande
11

W Google używają systemów flag do ustawiania domyślnych wartości argumentów. Jest podobny do argparse. Używają własnego systemu flag zamiast argparse lub sys.argv.

Źródło: wcześniej tam pracowałem.

Ahmed
źródło
5

Kiedy używasz tf.app.run(), możesz bardzo wygodnie przenosić zmienną między wątkami za pomocą tf.app.flags. Zobacz to do dalszego wykorzystania tf.app.flags.

Cro
źródło
4

Po wielu próbach znalazłem to, aby wydrukować wszystkie klucze FLAGS, a także rzeczywistą wartość -

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

  print(key, FLAGS[key].value)
Nandani
źródło
3
masz na myśli FLAGI [klucz]
physincubus