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?

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.


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ć.


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.


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.


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)

3
masz na myśli FLAGI [klucz]
physincubus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.