2016-06-16 14 views
22

मैं टेंसरफ्लो के लिए नया हूं। जबकि मैं दस्तावेज पढ़ रहा हूँ। मुझे tensor शब्द वास्तव में उलझन में मिला। tensor और Variable, tensor बनाम tf.constant, 'टेंसर' बनाम tf.placeholder के बीच संबंध क्या है? क्या वे सभी प्रकार के टेंसर हैं?टेंसरफ्लो में 'टेंसर' शब्द को कैसे समझें?

+0

हाँ, टेंसर एक ऑब्जेक्ट की तरह है, यह एक स्ट्रिंग एक चर हो सकता है और इतने पर .... –

+0

मुझे लगता है कि ** डेटा ** और ** ऑपरेशंस ** टेंसरफ्लो में क्या हैं, इस प्रश्न के लिए सहायक होगा । – zhy

उत्तर

42

टेंसरफ्लो में प्रथम श्रेणी के टेंसर ऑब्जेक्ट्स नहीं हैं, जिसका अर्थ है कि रनटाइम द्वारा निष्पादित अंतर्निहित ग्राफ में Tensor की कोई धारणा नहीं है। इसके बजाय ग्राफ़ में एक दूसरे से जुड़े ओप नोड्स होते हैं, जो संचालन का प्रतिनिधित्व करते हैं। एक ऑपरेशन अपने आउटपुट के लिए मेमोरी आवंटित करता है, जो एंडपॉइंट्स :0, :1 इत्यादि पर उपलब्ध हैं, और आप Tensor के रूप में इन सभी बिंदुओं के बारे में सोच सकते हैं। यदि आपके पास tensornodename:0 से संबंधित है तो आप इसका मान sess.run(tensor) या sess.run('nodename:0') के रूप में प्राप्त कर सकते हैं। निष्पादन ग्रैन्युलरिटी ऑपरेशन स्तर पर होती है, इसलिए run विधि सेशन निष्पादित करेगा जो सभी एंडपॉइंट्स की गणना करेगा, न केवल :0 एंडपॉइंट। कोई आउटपुट (जैसे tf.group) के साथ एक ओप नोड होना संभव है, इस मामले में इसके साथ जुड़े कोई टेंसर नहीं हैं। एक अंतर्निहित ओप नोड के बिना टेंसर होना संभव नहीं है।

आप जांच कर सकते हैं कि इस

tf.reset_default_graph() 
value = tf.constant(1) 
print(tf.get_default_graph().as_graph_def()) 

की तरह कुछ कर रही तो tf.constant साथ आप एक ही आपरेशन नोड मिल द्वारा अंतर्निहित ग्राफ में होता है, और आप

इसी sess.run("Const:0") या sess.run(value) का उपयोग कर इसे प्राप्त कर सके, value=tf.placeholder(tf.int32)Placeholder नाम के साथ एक नियमित नोड बनाता है, और आप इसे feed_dict={"Placeholder:0":2} या feed_dict={value:2} के रूप में फ़ीड कर सकते हैं। आप session.run कॉल में प्लेसहोल्डर को फ़ीड और प्राप्त नहीं कर सकते हैं, लेकिन आप शीर्ष पर tf.identity नोड संलग्न करके परिणाम प्राप्त कर सकते हैं।

चर

tf.reset_default_graph() 
value = tf.Variable(tf.ones_initializer()(())) 
value2 = value+3 
print(tf.get_default_graph().as_graph_def()) 

आपको लगता है कि यह दो नोड्स Variable और Variable/read बनाता है देखेंगे के लिए, :0 endpoint इन नोड्स के दोनों पर लाने के लिए कोई मान्य मान है। हालांकि Variable:0 में एक विशेष ref प्रकार है जिसका अर्थ है कि इसे उत्परिवर्तित संचालन के लिए इनपुट के रूप में उपयोग किया जा सकता है। पायथन कॉल tf.Variable का परिणाम एक पायथन Variable ऑब्जेक्ट है और उत्परिवर्तन आवश्यक है या नहीं, इस पर निर्भर करता है कि Variable/read:0 या Variable:0 को प्रतिस्थापित करने के लिए कुछ पायथन जादू है। चूंकि अधिकांश ऑप्स में केवल 1 एंडपॉइंट होता है, :0 गिरा दिया जाता है। एक और उदाहरण Queue - close() विधि एक नया Close ओप नोड बनाएगा जो Queue से कनेक्ट होता है। संक्षेप में - उपयोग के आधार पर विभिन्न अंतर्निहित टेंसरफ्लो ओप नोड्स पर Variable और Queue मानचित्र जैसे पायथन वस्तुओं पर संचालन।

tf.split या tf.nn.top_k जो कई अंतिमबिंदुओं साथ नोड्स बनाने के लिए, पायथन के session.run कॉल की तरह ऑप्स के लिए स्वचालित रूप से tuple या Tensor वस्तुओं जो व्यक्तिगत रूप से दिलवाया जा सकता है की collections.namedtuple में उत्पादन गिर्द घूमती है।

+0

'प्रथम श्रेणी के टेंसर ऑब्जेक्ट्स' से आपका क्या मतलब है? 'Tf.Tensor' नामक एक कक्षा है। यदि संभव हो तो एक उदाहरण के साथ समझा सकता है। –

+0

अंतर्निहित ग्राफ में कोई टेंसर नहीं हैं, बस अन्य ops से जुड़े ops –

+0

आप किसी ऑपरेशन को कैसे एक्सेस करते हैं? क्या आप केवल ऑपरेशन के इनपुट और आउटपुट तक पहुंच सकते हैं? –

9

glossary से:

एक टेन्सर एक टाइप किया बहुआयामी सरणी है। उदाहरण के लिए, फ्लोटिंग पॉइंट नंबरों की एक 4-डी सरणी जिसमें आयामों [बैच, ऊंचाई, चौड़ाई, चैनल] वाली छवियों के मिनी-बैच का प्रतिनिधित्व किया जाता है।

  • प्लेसहोल्डर Tensors जो करने के लिए आप (sess.run() में feed_dict तर्क के साथ) एक मूल्य फ़ीड कर सकते हैं
  • :

असल में, हर डेटा TensorFlow में एक टेन्सर (इसलिए नाम) है वेरिएबल टेंसर हैं जिन्हें आप अपडेट कर सकते हैं (var.assign() के साथ)। तकनीकी रूप से, tf.Variable की tf.Tensor हालांकि

  • tf.constant बहुत ही बुनियादी टेन्सर है, जो दिए गए एक निश्चित मूल्य में शामिल है जब आप इसे

  • बनाने हालांकि, ग्राफ में एक उपवर्ग नहीं है, प्रत्येक नोड है एक ऑपरेशन, जिसमें इनपुट या आउटपुट के रूप में टेंसर हो सकते हैं।

    +3

    मैं सहमत नहीं हूं। यदि आप टेंसफोर्लो व्हाइट पेपर के सेक्शन 2 को देखते हैं: "एक टेंसरफ्लो ग्राफ में, प्रत्येक नोड में शून्य या अधिक इनपुट और शून्य या अधिक आउटपुट होते हैं, और ऑपरेशन के को तत्कालता का प्रतिनिधित्व करते हैं"। वेरिएबल, स्थिर और प्लेसहोल्डर नोड्स, उर्फ, ऑपरेशन की तत्कालता जैसे tf.mul या tf.add हैं। मुझे लगता है कि वे उत्पादन के रूप में टेंसर का उत्पादन करते हैं, लेकिन वे स्वयं टेंसर नहीं हैं। – ZijunLost

    +0

    वैसे हाँ, ग्राफ संचालन से बना है, जो स्वयं के बीच टेंसर पास करता है।मैं 'tf.constant' और' tf.placeholder' –

    +2

    से जुड़े संचालनों को समझाने के लिए अपने टेंसर को अपडेट करूंगा, लेकिन मुझे अभी भी विश्वास है कि प्लेसहोल्डर्स या स्थिरांक को 'ऑपरेशंस' के रूप में कॉल करना बेहतर है जो कहने के बजाय टेंसर उत्पन्न करते हैं "प्लेसहोल्डर हैं tensors "। यदि आप दस्तावेज़ पढ़ते हैं: "टेंसरफ्लो प्लेसहोल्डर ऑपरेशन प्रदान करता है जिसे निष्पादन पर डेटा के साथ खिलाया जाना चाहिए। अधिक जानकारी के लिए, डेटा खाने पर अनुभाग देखें।" – ZijunLost

    1

    जैसा कि पहले से ही दूसरों ने उल्लेख किया है, हां वे सभी टेंसर हैं।

    जिस तरह से मैंने उन्हें समझ लिया है, उन्हें पहले चित्र में 1 डी, 2 डी, 3 डी, 4 डी, 5 डी, और 6 डी टेंसर की कल्पना करना और समझना है। (स्रोत: knoldus)

    tensor-definition

    अब, TensorFlow के संदर्भ में, आप नीचे एक तरह एक गणना ग्राफ कल्पना कर सकते हैं।

    computation-graph

    यहाँ, यह दो tensors a और इनपुटbके रूप में लेता है; गुणा अपने साथ टेंसर और फिर जोड़ता है परिणामस्वरूप टेंसर t3 उत्पन्न करने के लिए इन गुणाओं का परिणाम। और ये गुणा और अतिरिक्तOp गणना गणना ग्राफ में नोड्स पर होते हैं।

    और इन टेंसर a और b निरंतर टेंसर, परिवर्तनीय टेंसर या प्लेसहोल्डर्स हो सकते हैं। इससे कोई फर्क नहीं पड़ता, जब तक वे संचालन प्राप्त करने के लिए एक ही डेटा प्रकार और संगत आकार (या broadcast सक्षम) होते हैं।

    संबंधित मुद्दे