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.