Apa tujuan tf.app.flags di TensorFlow?

115

Saya membaca beberapa kode contoh di Tensorflow, saya menemukan kode berikut

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

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

Tetapi saya tidak dapat menemukan dokumen apa pun tentang penggunaan tf.app.flags.

Dan saya menemukan implementasi dari flag ini di tensorflow/tensorflow/python/platform/default/_flags.py

Jelas, ini tf.app.flagsentah bagaimana digunakan untuk mengonfigurasi jaringan, jadi mengapa tidak ada di dokumen API? Adakah yang bisa menjelaskan apa yang terjadi di sini?

gagal 1217
sumber

Jawaban:

110

The tf.app.flagsmodul saat pembungkus tipis sekitar python-gflags, sehingga dokumentasi untuk proyek yang adalah sumber daya terbaik untuk bagaimana menggunakannya argparse , yang mengimplementasikan subset dari fungsi dalam python-gflags.

Perhatikan bahwa modul ini saat ini dikemas sebagai kemudahan untuk menulis aplikasi demo, dan secara teknis bukan bagian dari API publik, sehingga dapat berubah di masa mendatang.

Kami menyarankan Anda menerapkan penguraian bendera Anda sendiri menggunakan argparseatau pustaka apa pun yang Anda inginkan.

EDIT: The tf.app.flagsmodule tidak sebenarnya diimplementasikan menggunakan python-gflags, tetapi menggunakan API yang sama.

mrry
sumber
80
"dikemas sebagai kemudahan untuk menulis aplikasi demo, dan secara teknis bukan bagian dari AP publik" ... agak aneh bahwa ini digunakan di hampir setiap tutorial, tetapi tidak ada dokumentasi di dalamnya. Menyebabkan banyak kebingungan.
speedplane
2
Untuk contoh yang baik tentang cara menggunakan argparse untuk meneruskan argumen ke model TensorFlow dan cara menggabungkannya ke dalam modul Python untuk cloud, lihat task.py di modul taxifare , bagian dari materi kursus training-data-analyst .
charlesreid1
3
Apakah tf.app.runjuga bukan bagian dari API publik? Karena mengandalkan tf.app.flagsdan memiliki dokumentasi publik ( tensorflow.org/api_docs/python/tf/app/run ), jadi saya menganggapnya publik dan didukung. Jika lebih disarankan untuk digunakan argparse, dapatkah Anda memberikan contoh singkat cara penggunaan yang disarankan dengan argparse?
naktinis
6
dokumentasi bukanlah masalah untuk semua hal di tensorflow.
kode mati
37

The tf.app.flagsmodul adalah fungsi yang disediakan oleh Tensorflow untuk melaksanakan bendera baris perintah untuk program Tensorflow Anda. Sebagai contoh, kode yang Anda temukan akan melakukan hal berikut:

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

Parameter pertama mendefinisikan nama bendera sedangkan yang kedua mendefinisikan nilai default jika bendera tidak ditentukan saat menjalankan file.

Jadi jika Anda menjalankan yang berikut ini:

$ python fully_connected_feed.py --learning_rate 1.00

maka kecepatan pemelajaran disetel ke 1,00 dan akan tetap 0,01 jika bendera tidak ditentukan.

Seperti yang disebutkan dalam artikel ini , dokumen mungkin tidak ada karena ini mungkin sesuatu yang Google perlukan secara internal untuk digunakan oleh pengembangnya.

Selain itu, seperti yang disebutkan di postingan, ada beberapa keuntungan menggunakan flag Tensorflow dibandingkan fungsi flag yang disediakan oleh paket Python lain seperti argparseterutama saat menangani model Tensorflow, yang terpenting adalah Anda dapat memberikan informasi spesifik Tensorflow ke kode seperti informasi tentang GPU mana yang akan digunakan.

Vedang Waradpande
sumber
1
apa yang dikatakan parameter ketiga? mungkin itu seperti string dokumen kecil. Ingin tahu apakah saya salah.
shivam13juna
Ya, mungkin itu. Saya belum melihat kegunaan praktisnya sejauh ini, jadi saya rasa itu untuk pengertian Anda.
Vedang Waradpande
11

Di Google, mereka menggunakan sistem bendera untuk menyetel nilai default untuk argumen. Ini mirip dengan argparse. Mereka menggunakan sistem bendera mereka sendiri, bukan argparse atau sys.argv.

Sumber: Saya pernah bekerja di sana sebelumnya.

Ahmed
sumber
5

Saat Anda menggunakan tf.app.run(), Anda dapat mentransfer variabel dengan sangat nyaman di antara utas menggunakan tf.app.flags. Lihat ini untuk penggunaan lebih lanjut tf.app.flags.

Cro
sumber
4

Setelah mencoba berkali-kali saya menemukan ini untuk mencetak semua kunci BENDERA serta nilai sebenarnya -

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

  print(key, FLAGS[key].value)
Nandani
sumber
3
maksud Anda BENDERA [key]
physincubus