2016-05-08 7 views
6

टेंसरफ्लो के मेरे उपयोग-मामले के लिए मुझे प्रत्येक इंस्टेंस के लिए एक नया गणना ग्राफ बनाने की आवश्यकता है जिसे संसाधित करने की आवश्यकता है। यह स्मृति आवश्यकताओं को उड़ाता है।टेंसरफ्लो ग्राफ में कुछ नोड्स को हटाकर

मॉडल पैरामीटर वाले कुछ tf.Variables के अलावा, मैं अन्य सभी नोड्स को हटाना चाहता हूं। समान समस्याओं वाले अन्य लोगों को tf.reset_default_graph() उपयोगी होने के लिए मिला है, लेकिन यह उन मॉडल पैरामीटर से छुटकारा पायेगा जिन्हें मुझे जारी रखने की आवश्यकता है।

इन सभी नोड्स को हटाने के लिए मैं क्या उपयोग कर सकता हूं?

संपादित करें: उदाहरण विशिष्ट कंप्यूटेशंस वास्तव में इसका मतलब है कि मैं बहुत सारे नए परिचालन जोड़ रहा हूं। मेरा मानना ​​है कि ये ऑपरेशन स्मृति मुद्दों के पीछे कारण हैं।

अद्यतन: देखें हाल ही में tensorflow गुना (https://github.com/tensorflow/fold) जारी किया जो गणना रेखांकन के गतिशील निर्माण की अनुमति देता है।

+0

tf.reset_default_graph –

उत्तर

10

tf.graph डेटा-संरचना को संलग्न करने के लिए डिज़ाइन किया गया है केवल डेटा-संरचना। इसलिए मौजूदा नोड्स को हटाने या संशोधित करना संभव नहीं है। आम तौर पर यह कोई समस्या नहीं है, क्योंकि सत्र चलाने पर केवल आवश्यक सबग्राफ संसाधित होता है।

आप जो भी कोशिश कर सकते हैं वह है अपने ग्राफ के वेरिबेल को नए ग्राफ में कॉपी करना और पुराने को हटा देना। इस संग्रह करने के लिए बस चलाने:

old_graph = tf.get_default_graph() # Save the old graph for later iteration 
new_graph = tf.graph() # Create an empty graph 
new_graph.set_default() # Makes the new graph default 

आप पुराने ग्राफ उपयोग में सभी नोड्स से अधिक पुनरावृति करना चाहते हैं:

for node in old_graph.get_operations(): 
    if node.type == 'Variable': 
     # read value of variable and copy it into new Graph 

वैकल्पिक रूप से आप उपयोग कर सकते हैं:

for node in old_graph.get_collection('trainable_variables'): 
    # iterates over all trainable Variabels 
    # read and create new variable 

भी एक नज़र ग्राफ़ में नोड्स में हेरफेर करने के अधिक तरीके देखने के लिए python/framework/ops.py : 1759 पर।

हालांकि tf.Graph के साथ आप गड़बड़ करने से पहले मैं दृढ़ता से यह विचार करने की अनुशंसा करता हूं कि यह वास्तव में आवश्यक है या नहीं। आम तौर पर कोई भी गणना को सामान्यीकृत करने और साझा चर का उपयोग करने के लिए एक ग्राफ का निर्माण करने का प्रयास कर सकता है, ताकि प्रत्येक उदाहरण जिसे आप संसाधित करना चाहते हैं, इस ग्राफ का एक उपलेख है।

+0

मुझे अभी एहसास हुआ कि मेमोरी उड़ाने का कारण प्रत्येक गणना के लिए नए ऑपरेशन जोड़े गए हैं। मैं इन्हें कैसे साफ कर सकता हूं? – navari

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