2015-12-12 9 views
14

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

उत्तर

16

TensorFlow tf.Graph वर्ग एक संलग्न-केवल डेटा संरचना, कि आप ग्राफ के हिस्से को क्रियान्वित करने के बाद ग्राफ को नोड्स जोड़ सकते हैं जिसका मतलब है कि है, लेकिन आप हटाने या मौजूदा नोड्स संशोधित नहीं कर सकते। चूंकि TensorFlow केवल Session.run() पर कॉल करते समय केवल आवश्यक सबग्राफ निष्पादित करता है, इसलिए ग्राफ में अनावश्यक नोड्स होने के लिए कोई निष्पादन-समय लागत नहीं होती है (हालांकि वे स्मृति का उपभोग जारी रखेंगे)।

ग्राफ में सभी नोड्स निकालने के लिए, आप एक नया ग्राफ के साथ एक सत्र बना सकते हैं:

with tf.Graph().as_default(): # Create a new graph, and make it the default. 
    with tf.Session() as sess: # `sess` will use the new, currently empty, graph. 
    # Build graph and execute nodes in here. 
+3

"हालांकि वे स्मृति का उपभोग जारी रखेंगे" - क्या यह स्मृति जारी की जाती है जब सत्र पाइथन रनटाइम द्वारा एकत्रित कचरा होता है? –

5

हाँ, tf.Graph एक संलग्न-केवल फैशन में निर्माण @mrry कहते हैं के रूप में कर रहे हैं।

लेकिन वहाँ वैकल्पिक हल है:

सैद्धांतिक रूप में आप इसे क्लोनिंग कर किसी मौजूदा ग्राफ को संशोधित करने और संशोधन रास्ते की जरूरत प्रदर्शन कर सकते हैं। आर 1.1 के अनुसार, टेन्सफोर्लो tf.contrib.graph_editor नामक एक मॉड्यूल प्रदान करता है जो उपरोक्त विचार को अविश्वसनीय कार्यों के सेट के रूप में लागू करता है।

+6

बहुत खराब दस्तावेज इन तरीकों से संबंधित खराब है –

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