TensorFlow में tf.app.flags का उद्देश्य क्या है?


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किसी तरह एक नेटवर्क को कॉन्फ़िगर करने के लिए उपयोग किया जाता है, तो यह एपीआई डॉक्स में क्यों नहीं है? क्या कोई समझा सकता है कि यहां क्या चल रहा है?

जवाबों:


110

tf.app.flagsमॉड्यूल इस समय चारों ओर एक पतली आवरण है , अजगर-gflags इसलिए कि इस परियोजना के लिए दस्तावेज़ इसे उपयोग करने के लिए सबसे अच्छा स्रोत है argparse , जिसमें कार्यक्षमता के एक सबसेट को लागू करता है python-gflags

ध्यान दें कि यह मॉड्यूल वर्तमान में डेमो ऐप्स लिखने की सुविधा के रूप में पैक किया गया है, और तकनीकी रूप से सार्वजनिक एपीआई का हिस्सा नहीं है, इसलिए यह भविष्य में बदल सकता है।

हम अनुशंसा करते हैं कि आप अपने स्वयं के फ़्लैग पार्सिंग का उपयोग करके argparseया जिस भी लाइब्रेरी को पसंद करते हैं, उसे लागू करें ।

संपादित करें:tf.app.flags मॉड्यूल का उपयोग कर लागू किया वास्तव में नहीं है python-gflags, लेकिन यह एक समान API का उपयोग करता।


80
"डेमो ऐप्स लिखने की सुविधा के रूप में पैक किया गया है, और तकनीकी रूप से सार्वजनिक एपी का हिस्सा नहीं है" ... इस तरह का अजीब है कि इसका उपयोग लगभग हर ट्यूटोरियल में किया जाता है, लेकिन इस पर कोई प्रलेखन नहीं है। काफी कन्फ्यूजन की ओर ले जाता है।
स्पीडप्लेन

2
TensorFlow मॉडल में तर्क पास करने के लिए और क्लाउड के लिए इसे पायथन मॉड्यूल में कैसे बंडल किया जाए, इसका एक अच्छा उदाहरण के लिए, टेक्सीफ़ेयर मॉड्यूल में टास्कफ़्रेम देखें , प्रशिक्षण-डेटा-विश्लेषक पाठ्यक्रम सामग्री का हिस्सा
charlesreid1

3
क्या tf.app.runसार्वजनिक एपीआई का हिस्सा भी नहीं है? क्योंकि यह निर्भर करता है tf.app.flagsऔर इसका सार्वजनिक दस्तावेज ( tsorflow.org/api_docs/python/tf/app/run ) है, इसलिए मेरा मानना ​​है कि यह सार्वजनिक और समर्थित है। यदि इसके argparseबजाय इसका उपयोग करने की अनुशंसा की जाती है , तो क्या आप इसके साथ उपयोग करने के अनुशंसित तरीके का एक संक्षिप्त उदाहरण प्रदान कर सकते हैं argparse?
नकटिनियां

6
सब कुछ के लिए एक समस्या का दस्तावेजीकरण नहीं है।
डेडकोड

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 को इसके डेवलपर्स के लिए आंतरिक रूप से उपयोग करने की आवश्यकता होती है।

इसके अलावा, जैसा कि पोस्ट में उल्लेख किया गया है, अन्य पायथन पैकेजों द्वारा प्रदान की गई ध्वज कार्यक्षमता पर टेन्सरफ़्लो फ़्लैग का उपयोग करने के कई फायदे हैं, जैसे कि argparseविशेष रूप से टेनसफ़्लो मॉडल के साथ काम करते समय, सबसे महत्वपूर्ण यह है कि आप कोड को विशिष्ट जानकारी जैसे सूचना के लिए टेन्सरफ़्लो की आपूर्ति कर सकते हैं। जिसके बारे में GPU का उपयोग करने के लिए।


1
तीसरा पैरामीटर क्या कहता है? शायद यह छोटे डॉक्टर स्ट्रिंग की तरह है। अगर मैं गलत हूँ जानना चाहूँगा।
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
आपका मतलब है फ्लैग [कुंजी]
फ्लैगस फिजिसबस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.