2017-05-24 11 views
8

से आउटपुट का विश्लेषण मैं tf.nn.dynamic_rnn tensorflow फ़ंक्शन से आउटपुट को समझने में सक्षम नहीं हूं। दस्तावेज़ केवल आउटपुट के आकार के बारे में बताता है, लेकिन यह नहीं बताता कि प्रत्येक पंक्ति/कॉलम का क्या अर्थ है। प्रलेखन से:tf.nn.dynamic_rnn tensorflow फ़ंक्शन

आउटपुट: RNN उत्पादन Tensor

तो time_major == झूठी (डिफ़ॉल्ट), यह एक Tensor आकार का हो जाएगा: [batch_size, max_time, cell.output_size]

यदि time_major == सही है, तो यह Tensor आकार होगा: [max_time, batch_size, cell.output_size]

ध्यान दें, यदि cell.output_size (संभवत: नेस्ट) पूर्णांकों या TensorShape वस्तुओं की टपल है, तो outputs एक टपल cell.output_size रूप
एक ही संरचना, Tensors युक्त आकार होने cell.output_size में आकृति डेटा के लिए इसी किया जाएगा।

राज्य: अंतिम राज्य। यदि cell.state_size एक int है, तो यह [batch_size, cell.state_size] आकार दिया जाएगा। यदि यह
TensorShape है, तो यह [batch_size] + cell.state_size आकार दिया जाएगा।
यदि यह इन्स या TensorShape का एक (संभवतः घोंसला) टुपल है, तो यह संबंधित आकार वाले टुपल होगा।

outputs टेंसर एक 3-डी मैट्रिक्स है लेकिन प्रत्येक पंक्ति/कॉलम क्या दर्शाता है?

उत्तर

12

tf.dynamic_rnn दो आउटपुट, outputs और state प्रदान करता है।

  • outputs में हर बार तत्काल आरएनएन सेल का उत्पादन होता है। डिफ़ॉल्ट time_major == False मानते हैं, मान लीजिए कि आपके पास 10 उदाहरणों के साथ 10 उदाहरणों से बना इनपुट है और हर बार चरण 5 के फीचर वेक्टर के लिए एक वेक्टर है। फिर आपका इनपुट 10x7x5 (batch_size x max_time x features होगा)। अब आप इसे आउटपुट आकार 15 के साथ एक आरएनएन सेल में इनपुट के रूप में देते हैं। संकल्पनात्मक रूप से, हर बार प्रत्येक उदाहरण का चरण आरएनएन में इनपुट होता है, और आपको उनमें से प्रत्येक के लिए 15-घंटे का वेक्टर मिल जाएगा। तो outputs में, आकार 10x7x15 (batch_size x max_time x cell.output_size) के इस मामले में एक टेंसर होता है, प्रत्येक बार चरण में आरएनएन सेल के आउटपुट के साथ। यदि आप केवल सेल के अंतिम आउटपुट में दिलचस्पी रखते हैं, तो आप केवल अंतिम तत्व (उदा। outputs[:, -1, :]) चुनने के लिए समय आयाम को टुकड़ा कर सकते हैं।
  • state में सभी इनपुट प्रोसेस करने के बाद आरएनएन की स्थिति शामिल है। ध्यान दें कि, outputs के विपरीत, इसमें हर बार चरण के बारे में जानकारी नहीं होती है, लेकिन केवल अंतिम के बारे में जानकारी (यानी, अंतिम के बाद)। आपके मामले के आधार पर, राज्य उपयोगी हो सकता है या नहीं भी हो सकता है। उदाहरण के लिए, यदि आपके पास बहुत लंबे अनुक्रम हैं, तो आप उन्हें एक बैच में संसाधित करने में सक्षम नहीं होना चाहेंगे, और आपको उन्हें कई बाद में विभाजित करने की आवश्यकता हो सकती है। यदि आप state को अनदेखा करते हैं, तो जब भी आप एक नया अनुक्रम देते हैं तो ऐसा होगा जैसे आप एक नया शुरू कर रहे हैं; अगर आपको राज्य याद है, हालांकि (उदा।इसे आउटपुट करना या इसे एक चर में संग्रहीत करना), आप आरएनएन की स्थिति को सही ढंग से ट्रैक रखने के लिए इसे बाद में (पैरामीटर tf.nn.dynamic_rnn पैरामीटर के माध्यम से) खिला सकते हैं, और इसे केवल प्रारंभिक स्थिति (आमतौर पर सभी शून्य) पर रीसेट कर सकते हैं। पूरे अनुक्रम पूरा करने के बाद। state का आकार आपके द्वारा उपयोग किए जा रहे आरएनएन सेल के आधार पर भिन्न हो सकता है, लेकिन, सामान्यतः, आपके पास प्रत्येक उदाहरण के लिए कुछ राज्य है (आकार batch_size x state_size के साथ एक या अधिक टेंसर, जहां state_size सेल प्रकार और आकार पर निर्भर करता है)।
+2

यह, लेकिन मेरा मानना ​​है कि 'राज्य' अतिरिक्त रूप से आपके नेटवर्क की प्रत्येक परत पर राज्य रखता है। तो यदि आप एक जीआरयू का उपयोग कर रहे हैं, तो आपके पास अपने उम्मीदवार और गेट परतों के उत्पादन के लिए एक राज्य होगा, और यदि आपका जीआरयू बहु-परत आरएनएन के लिए सेल था, तो आपके पास इन नेटवर्कों को आपके नेटवर्क में प्रत्येक परत के लिए होगा। – Engineero

+0

@Engineero हाँ, यह सही है, धन्यवाद। मैंने बहुत विस्तार नहीं दिया, लेकिन बहु-परत आरएनएन कोशिकाओं के लिए राज्य प्रत्येक व्यक्तिगत सेल के राज्यों की एक सूची होगी, क्योंकि एलएसटीएम कोशिकाएं टेंसर की एक जोड़ी होगी और इसी तरह। – jdehesa

+0

@jdehesa - क्या आप कृपया इस दूसरे प्रश्न को उठा सकते हैं जिसे मैंने उठाया? https://stackoverflow.com/questions/44116689/siamese-model-with-lstm-network-fails-to-rain-using-tensorflow – Mithun