TensorFlow के बारे में महसूस करने के लिए सबसे महत्वपूर्ण बात यह है कि, अधिकांश भाग के लिए, कोर पायथन में नहीं लिखा गया है : यह अत्यधिक अनुकूलित C ++ और CUDA (प्रोग्रामिंग GPUs के लिए एनवीडिया की भाषा) के संयोजन में लिखा गया है। ज्यादातर ऐसा होता है, बदले में, Eigen (एक उच्च-प्रदर्शन C ++ और CUDA संख्यात्मक पुस्तकालय) और NVidia के cuDNN ( NVIDia GPU के लिए एक बहुत ही अनुकूलित DNN लाइब्रेरी , जैसे कि दृढ़ संकल्प ) का उपयोग करके।
TensorFlow के लिए मॉडल यह है कि प्रोग्रामर मॉडल को व्यक्त करने के लिए "कुछ भाषा" (सबसे अधिक संभावना पायथन!) का उपयोग करता है। यह मॉडल, TensorFlow में लिखा गया है जैसे:
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...
जब पायथन चलाया जाता है तो वास्तव में निष्पादित नहीं किया जाता है। इसके बजाय, जो वास्तव में बनाया गया है वह एक डेटाफ्लो ग्राफ है जो विशेष इनपुट लेने के लिए कहता है, विशेष ऑपरेशन लागू करता है, अन्य ऑपरेशनों के इनपुट के रूप में परिणाम की आपूर्ति करता है, और इसी तरह। यह मॉडल तेजी से C ++ कोड द्वारा निष्पादित किया जाता है, और अधिकांश भाग के लिए, संचालन के बीच जाने वाले डेटा को कभी भी Python कोड पर वापस कॉपी नहीं किया जाता है ।
फिर प्रोग्रामर नोड्स पर खींचकर इस मॉडल के निष्पादन को चलाता है - प्रशिक्षण के लिए, आमतौर पर पायथन में, और सेवा के लिए, कभी पायथन में और कभी कच्चे सी ++ में।
sess.run(eval_results)
यह एक पायथन (या C ++ फ़ंक्शन कॉल) वितरित संस्करण के लिए C ++ या RPC में या तो इन-प्रोसेस कॉल का उपयोग करता है , इसे निष्पादित करने के लिए बताने के लिए C ++ TensorFlow सर्वर में कॉल करता है, और फिर परिणामों की प्रतिलिपि बनाता है।
इसलिए, इस प्रश्न के साथ, आइए इस प्रश्न को फिर से उद्धृत करें: मॉडल के प्रशिक्षण को व्यक्त करने और नियंत्रित करने के लिए टेंसोरफ्लो ने पायथन को पहली अच्छी तरह से समर्थित भाषा के रूप में क्यों चुना?
इसका जवाब आसान है: अजगर शायद है भी कि आसान एकीकृत और एक सी ++ बैकएंड को नियंत्रित करने के लिए, जबकि यह भी सामान्य किया जा रहा है कि डेटा वैज्ञानिकों और मशीन सीखने विशेषज्ञों की एक बड़ी रेंज के लिए सबसे अधिक आरामदायक भाषा, अंदर और बाहर दोनों व्यापक रूप से इस्तेमाल Google का, और खुला स्रोत। यह देखते हुए कि TensorFlow के मूल मॉडल के साथ, पायथन का प्रदर्शन उतना महत्वपूर्ण नहीं है, यह एक प्राकृतिक फिट था। यह भी एक बहुत बड़ा प्लस है कि न्यूपाइ ने पायथन में प्री-प्रोसेसिंग करना आसान बना दिया है - यह भी उच्च प्रदर्शन के साथ - वास्तव में सीपीयू-भारी चीजों के लिए टेंसोरफ्लो में खिलाने से पहले।
मॉडल को व्यक्त करने में जटिलता का एक गुच्छा भी है जो इसे निष्पादित करते समय उपयोग नहीं किया जाता है - आकार का निष्कर्ष (जैसे, यदि आप मटमुल (ए, बी) करते हैं, तो परिणामी डेटा का आकार क्या है?) और स्वचालित ढाल संगणना। यह पता चला है कि पायथन में उन लोगों को व्यक्त करने में सक्षम होना अच्छा है, हालांकि मुझे लगता है कि लंबी अवधि में वे शायद अन्य भाषाओं को जोड़ने के लिए C ++ बैकएंड पर चले जाएंगे।
(आशा, ज़ाहिर है, बनाने और मॉडल व्यक्त करने के लिए भविष्य में अन्य भाषाओं का समर्थन है यह पहले से ही कई अन्य भाषाओं का उपयोग कर निष्कर्ष को चलाने के लिए काफी सीधा है -। सी ++ अब काम करता है, फेसबुक से कोई योगदान जाओ बाइंडिंग है कि अब हम समीक्षा कर रहे हैं , आदि।)