2017-02-26 7 views
6

(का उपयोग कर अजगर)आउटपुट LSTM सेल

मैं Tensorflow LSTM-कार्यान्वयन पर एक सवाल मिल गया है। वर्तमान में TF में कई कार्यान्वयन कर रहे हैं, लेकिन मैं का उपयोग करें:

cell = tf.contrib.rnn.BasicLSTMCell(n_units) 
  • जहां n_units 'समानांतर' LSTM कोशिकाओं की राशि है।

तब मेरे उत्पादन प्राप्त करने के लिए मैं फोन:

rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, x, 
         initial_state=initial_state, time_major=False) 
  • जहां (time_major=False के रूप में) x आकार के (batch_size, time_steps, input_length)
  • जहां batch_size मेरी batch_size
  • जहां time_steps की राशि है है मेरे आरएनएन का समय
  • से गुजर जाएगा जहां input_length मेरी इनपुट वैक्टर में से एक (सदिश एक विशिष्ट बैच पर एक विशिष्ट timestep पर नेटवर्क में खिलाया) की लंबाई

मैं rnn_outputs के रूप में मैं एक और उत्पादन आकार निर्दिष्ट नहीं किया है आकार (batch_size, time_steps, n_units, input_length) के होने की उम्मीद है। nn.dynamic_rnn का दस्तावेज़ीकरण मुझे बताता है कि आउटपुट आकार (batch_size, input_length, cell.output_size) है। tf.contrib.rnn.BasicLSTMCell के प्रलेखन में output_size है, जो n_units (एलएसटीएम-कोशिकाओं का उपयोग करने की मात्रा) के लिए डिफ़ॉल्ट है।

तो क्या प्रत्येक एलएसटीएम-सेल प्रत्येक दिए गए समय के लिए केवल एक स्केलर आउटपुट करता है? मैं उम्मीद करता हूं कि यह इनपुट वेक्टर की लंबाई के वेक्टर को आउटपुट करे। ऐसा लगता है कि मैं इसे अभी कैसे समझता हूं, इसलिए मैं उलझन में हूं। क्या आप मुझे बता सकते हैं कि यह मामला है या मैं इनपुट वेक्टर प्रति एकल एलएसटीएम-सेल के आकार के वेक्टर को आउटपुट करने के लिए कैसे बदल सकता हूं?

+0

आप इस निष्कर्ष पर कैसे पहुंचे कि प्रत्येक एलएसटीएम सेल केवल प्रत्येक दिए गए समय के लिए एक स्केलर आउटपुट करता है? – jabalazs

+0

क्या आप एक गिस्ट या बड़ा कोड स्निपेट पोस्ट कर सकते हैं ताकि हम संदर्भ को बेहतर ढंग से समझने के लिए कोड को देख सकें/चला सकें? –

उत्तर

2

मुझे लगता है कि प्राथमिक भ्रम एलएसटीएम सेल के तर्क की शब्दावली पर है: num_units। दुर्भाग्य से इसका मतलब यह नहीं है, जैसा कि नाम से पता चलता है, "एलएसटीएम कोशिकाओं का नंबर" जो आपके समय-चरणों के बराबर होना चाहिए। वे वास्तव में छिपे हुए राज्य (सेल राज्य + छुपा राज्य वेक्टर) में आयामों की संख्या के अनुरूप हैं। dynamic_rnn() करने के लिए कॉल आकार का एक टेन्सर रिटर्न: [batch_size, time_steps, output_size] जहां,

(इसका ध्यान रखें) output_size = NUM_UNITS; यदि lstm सेल
में (num_proj = कोई नहीं), output_size = num_proj; अगर यह परिभाषित किया गया है।

अब, आम तौर पर, आप पिछले time_step के परिणाम निकाल देंगे और मैन्युअल रूप से एक mat-mul + biases आपरेशन का उपयोग कर उत्पादन आयाम के आकार को प्रोजेक्ट, या LSTM सेल में num_proj तर्क का उपयोग करें।
मैं एक ही भ्रम के माध्यम से रहा हूं और इसे साफ़ करने के लिए वास्तव में गहराई से देखना पड़ा। आशा है कि यह जवाब इसमें से कुछ को साफ़ करता है।