2016-03-10 11 views
5

क्या TensorFlow स्वचालित रूप से कैश गणना कर सकता है यदि उनमें समान गणना (उप-) ग्राफ़ में एकाधिक कॉल शामिल हैं?TensorFlow कैश (उप-) ग्राफ गणना कर सकते हैं?

उदाहरण के लिए, मेरे पास एक मैट्रिक्स F है जिसमें प्रत्येक प्रविष्टि ट्रेन करने योग्य चर W पर आधारित गणना का प्रतिनिधित्व करती है। मेरा उद्देश्य कार्य विभिन्न मैट्रिक्स के साथ कई बार इस मैट्रिक्स को गुणा करता है (प्रत्येक अपरिवर्तित डब्ल्यू के साथ समय)।

उदाहरण के लिए, F[1,2] जब भी मैं एक्सेस करता हूं, या यह उस मूल्य को कैश करेगा, तो TensorFlow recompute करेगा?

सिद्धांत रूप में, एक मैट्रिक्स F दिया एक निश्चित W, ऐसी है कि F में प्रत्येक प्रविष्टि एक tf.constant है precompute सकता है। लेकिन W के ग्रेडियेंट की सही गणना को रोक देगा।

+0

यह प्रश्न संबंधित प्रतीत होता है: http://stackoverflow.com/questions/34536340/how-to-use-tensorflow-optimizer-without-recomputing-activations-in-reinforcement –

उत्तर

2

टेंसरफ्लो सीमित कैशिंग का प्रदर्शन करता है, लेकिन संभवतः यह आपके द्वारा वर्णित मामले को कवर नहीं करता है।

आप निम्नलिखित विकल्पों के साथ एक tf.Session बनाते हैं, तो निरंतर तह सक्षम कर दिया जाएगा:

config = tf.ConfigProto(graph_options=tf.GraphOptions(
    optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L2))) 
sess = tf.Session(config=config) 

जब आप इस विन्यास के साथ sess.run() फोन, TensorFlow चलाने के लिए उपयुक्त नोड्स का मूल्यांकन करेंगे, तो उन की subgraph की पहचान नोड्स जिनके आउटपुट स्थिर हैं, उनका मूल्यांकन करें, और परिणामों को कैश करें। इसलिए, यह अनावश्यक गणना को फिर से निष्पादित करने से बच जाएगा।

हालांकि, आपके प्रश्न में आप उल्लेख करते हैं कि F कुछ प्रशिक्षित चर के एक समारोह है। टेंसरफ्लो के दृष्टिकोण से, ये चर अस्थिर — वे किसी भी समय — में बदल सकते हैं, इसलिए यह इन चर से प्राप्त मूल्यों को कैश नहीं करता है। यदि आप F के लिए एक ही मान का पुन: उपयोग करना चाहते हैं, तो आप इसे tf.constant() में संग्रहीत करने पर विचार कर सकते हैं ताकि निरंतर फोल्डिंग अनुकूलन अधिक उपयोगी हो।

+0

जानकारी के लिए धन्यवाद। मैं देखता हूं कि विकल्प 'tf.OptimizerOptions.L1'' common_subexpression_elimination' करता है और 'tf.OptimizerOptions.L2'' constant_folding' करता है। लेकिन अगर वे विकल्प ग्रेडियेंट को सही तरीके से संभाल नहीं पाते हैं तो यह मेरे मामले के लिए काम नहीं करेगा। –

+0

दोनों अनुकूलन का आपके प्रोग्राम के अर्थशास्त्र पर कोई प्रभाव नहीं होना चाहिए, इसलिए ग्रेडियेंट को सही ढंग से संभालना चाहिए। हालांकि, चूंकि ढाल गणना की विशाल बहुमत वर्तमान परिवर्तनीय मानों पर निर्भर करती है, इसलिए मैं एक बड़ी गति (शायद कुछ प्रतिशत, ओप प्रेषण ओवरहेड को खत्म करने के कारण) की अपेक्षा नहीं करता। – mrry

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