2017-09-11 27 views
6

जब मैं tensorflow सीख रहा था, tensorflow की एक मूल अवधारणा कम्प्यूटेशनल ग्राफ था, और ग्राफ स्थिर कहा जाता था। और मुझे पायटोरच में मिला, ग्राफ को गतिशील कहा जाता था। टेटोर्स्लो में स्थिर कम्प्यूटेशनल ग्राफ और प्योरोच में गतिशील कम्प्यूटेशनल ग्राफ का क्या अंतर है?टेटोर्स्लो में स्थिर कम्प्यूटेशनल ग्राफ और प्योरोच में गतिशील कम्प्यूटेशनल ग्राफ का अंतर क्या है?

उत्तर

6

दोनों ढांचे टेंसर पर काम करते हैं और किसी भी मॉडल को निर्देशित विश्वकोश ग्राफ (डीएजी) के रूप में देखते हैं, लेकिन वे उन्हें परिभाषित करने के तरीके पर काफी भिन्न होते हैं।

टेंसरफ्लो 'कोड और कोड डेटा के रूप में डेटा' idiom का पालन करता है। टेंसरफ्लो में आप मॉडल चलाने से पहले ग्राफिक रूप से ग्राफ को परिभाषित करते हैं। बाहरी दुनिया के साथ सभी संचार tf.Session ऑब्जेक्ट और tf.Placeholder के माध्यम से किया जाता है जो टेंसर होते हैं जिन्हें रनटाइम पर बाहरी डेटा द्वारा प्रतिस्थापित किया जाएगा।

पायटोरच में चीजें अधिक जरूरी और गतिशील होती हैं: आप नोड्स को परिभाषित, परिवर्तित और निष्पादित कर सकते हैं, कोई विशेष सत्र इंटरफेस या प्लेसहोल्डर नहीं। कुल मिलाकर, ढांचे को पाइथन भाषा के साथ अधिक कड़ाई से एकीकृत किया जाता है और ज्यादातर बार अधिक देशी लगता है। जब आप टेंसरफ्लो में लिखते हैं तो कभी-कभी आपको लगता है कि आपका मॉडल ईंट की दीवार के पीछे है, जिसमें कई छोटे छेद संचार करने के लिए हैं। वैसे भी, यह अभी भी स्वाद के मामले की तरह लगता है कम या ज्यादा।

हालांकि, ये दृष्टिकोण न केवल एक सॉफ्टवेयर इंजीनियरिंग परिप्रेक्ष्य में भिन्न हैं: कई गतिशील तंत्रिका नेटवर्क आर्किटेक्चर हैं जो गतिशील दृष्टिकोण से लाभ उठा सकते हैं। आरएनएन याद करें: स्थिर ग्राफ के साथ, इनपुट अनुक्रम लंबाई स्थिर रहेगी। इसका अर्थ यह है कि यदि आप अंग्रेजी वाक्यों के लिए एक भावना विश्लेषण मॉडल विकसित करते हैं तो आपको वाक्य की लंबाई को अधिकतम मान पर ठीक करना होगा और शून्य के साथ सभी छोटे अनुक्रमों को पैड करना होगा। बहुत सुविधाजनक नहीं, हुह। और आपको रिकर्सिव आरएनएन और पेड़-आरएनएन के डोमेन में और समस्याएं मिलेंगी। वर्तमान में टेन्सफोर्लो के पास टेन्सफोर्लो फोल्ड के माध्यम से गतिशील इनपुट के लिए सीमित समर्थन है। PyTorch यह डिफ़ॉल्ट रूप से है।

संदर्भ:

https://medium.com/towards-data-science/pytorch-vs-tensorflow-spotting-the-difference-25c75777377b

https://www.reddit.com/r/MachineLearning/comments/5w3q74/d_so_pytorch_vs_tensorflow_whats_the_verdict_on/

+0

आपके द्वारा प्रदान किया गया वेब लिंक उपयोगी है, धन्यवाद! – user166974

0

tensorflow में आप पहले को ग्राफ को परिभाषित करना है, फिर आप इसे निष्पादित करते हैं। एक बार परिभाषित किया गया है कि ग्राफ अपरिवर्तनीय है: आप रनटाइम पर नोड्स को जोड़/हटा नहीं सकते हैं।

pytorch में, इसके बजाय, आप रनटाइम पर ग्राफ की संरचना को बदल सकते हैं: आप इस प्रकार रनटाइम पर नोड्स को जोड़/हटा सकते हैं, गतिशील रूप से इसकी संरचना बदल सकते हैं।

4

दोनों TensorFlow और PyTorch समय में किसी भी बिंदु पर नई संगणना निर्दिष्ट करने की अनुमति देते हैं। हालांकि, टेंसरफ्लो में "संकलन" चरण होते हैं जो हर बार ग्राफ़ को संशोधित करते समय प्रदर्शन जुर्माना लगाते हैं। इसलिए जब आप एक बार गणना निर्दिष्ट करते हैं तो टेंसरफ्लो इष्टतम प्रदर्शन प्राप्त होता है, और उसके बाद गणना के समान अनुक्रम के माध्यम से नया डेटा प्रवाह करता है।

यह दुभाषिया बनाम कंपाइलर्स के समान है - संकलन चरण चीजों को तेज़ी से बनाता है, लेकिन लोगों को प्रोग्राम को अक्सर संशोधित करने से भी हतोत्साहित करता है।

चीजें ठोस बनाने के लिए, जब आप टेंसरफ्लो में ग्राफ को संशोधित करते हैं (नियमित एपीआई का उपयोग करके नए कंप्यूटेशंस को जोड़कर, या tf.contrib.graph_editor का उपयोग करके कुछ गणना को हटाकर), यह लाइन session.py में ट्रिगर की जाती है। यह ग्राफ को क्रमबद्ध करेगा, और उसके बाद अंतर्निहित रनटाइम कुछ अनुकूलन को दोबारा शुरू कर देगा जो अतिरिक्त समय ले सकता है, शायद 200usec। इसके विपरीत, पहले परिभाषित ग्राफ में एक सेशन चला रहा है, या numpy/PyTorch में 1 usec के रूप में कम हो सकता है।

+0

दुभाषिया/कंपाइलर समानता के लिए प्लस वन। – NeoWang

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