2017-04-11 15 views
6

मैं इस प्रारूप में से कुछ डेटा और निम्नलिखित विवरण दिया गया है:टेन्सफोर्लो गतिशील आरएनएन (एलएसटीएम): इनपुट कैसे प्रारूपित करें?

person1, day1, feature1, feature2, ..., featureN, label 
person1, day2, feature1, feature2, ..., featureN, label 
... 
person1, dayN, feature1, feature2, ..., featureN, label 
person2, day1, feature1, feature2, ..., featureN, label 
person2, day2, feature1, feature2, ..., featureN, label 
... 
person2, dayN, feature1, feature2, ..., featureN, label 
... 
  • वहाँ हमेशा सुविधाओं के एक ही नंबर है, लेकिन प्रत्येक सुविधा एक 0 का प्रतिनिधित्व कुछ भी नहीं हो सकता है
  • वहाँ एक अलग राशि है प्रत्येक व्यक्ति के लिए उपलब्ध दिनों, उदाहरण के लिए PERSON1 डेटा के 20 दिनों की है, PERSON2 50

लक्ष्य अगले दिन उस व्यक्ति का लेबल भविष्यवाणी करने के लिए है, इसलिए dayN + 1 के लिए लेबल, या तो एक प्रति-व्यक्ति के आधार पर, या समग्र है (प्रति व्यक्ति मुझे अधिक समझ में आता है)। मैं डेटा को स्वतंत्र रूप से दोबारा सुधार सकता हूं (यह बड़ा नहीं है)। इसके बाद के संस्करण के आधार पर करने के बाद कुछ पढ़ने मैंने सोचा था कि एक गतिशील RNN (LSTM) सबसे अच्छा काम कर सकता था:

  • आवर्तक तंत्रिका नेटवर्क: क्योंकि अगले दिन पिछले दिन पर निर्भर करता है
  • lstm: क्योंकि मॉडल प्रत्येक के साथ बनाता है दिन
  • गतिशील: प्रत्येक दिन क्योंकि सभी सुविधाओं मौजूद हैं

यह डेटा मेरे पास है के लिए कोई मतलब नहीं है, तो मुझे यहाँ रोक दें। प्रश्न तब है:

tensorflow/tflearn के लिए इस डेटा को कैसे/प्रारूपित करें?

मैंने this उदाहरण को tflearn का उपयोग करके देखा है, लेकिन मैं इसके इनपुट प्रारूप को समझ नहीं पा रहा हूं ताकि मैं इसे 'दर्पण' कर सकूं। इसी तरह, this पोस्ट को एक बहुत ही समान प्रश्न पर मिला है, फिर भी ऐसा लगता है कि पोस्टर एक-दूसरे के बीच संबंधित नहीं हैं क्योंकि वे मेरे हैं। Tensorflow के साथ मेरा अनुभव इसके get started पृष्ठ तक सीमित है।

उत्तर

13

गतिशील: क्योंकि सभी सुविधाओं के लिए प्रत्येक दिन

आप यहाँ गतिशील की गलत अवधारणा मिल गया है मौजूद हैं। टेन्सफोर्लो में गतिशील आरएनएन का अर्थ है कि ग्राफ़ गतिशील रूप से निष्पादन के दौरान बनाया गया है, लेकिन इनपुट हमेशा एक ही आकार होते हैं (0 सुविधा की कमी के रूप में 0 ठीक काम करना चाहिए)।

वैसे भी, जो आपने यहां प्राप्त किया है वह फीचर वैक्टर (फीचर 1 ... फीचरएन) की अलग-अलग लंबाई (दिन 1 ... दिन?) के अनुक्रम हैं। सबसे पहले, आप एक LSTM cell

cell = tf.contrib.rnn.LSTMcell(size) 

ताकि आप तो एक गतिशील unrolled rnn ग्राफ tf.nn.dynamic_rnn का उपयोग कर बना सकते हैं की जरूरत है। दस्तावेज़ों से:

इनपुट: आरएनएन इनपुट।

यदि time_major == गलत (डिफ़ॉल्ट), यह आकार का एक टेंसर होना चाहिए: [batch_size, max_time, ...], या ऐसे तत्वों का घोंसला वाला टुपल होना चाहिए।

जहां max_time इनपुट अनुक्रम लंबाई को संदर्भित करता है।क्योंकि हम dynamic_rnn उपयोग कर रहे हैं, अनुक्रम लंबाई संकलन समय के दौरान परिभाषित करने की आवश्यकता नहीं है, इसलिए अपने इनपुट प्लेसहोल्डर हो सकता है:

x = tf.placeholder(tf.float32, shape=(batch_size, None, N)) 

कौन सा तो में खिलाया है rnn

तरह
outputs, state = tf.nn.dynamic_rnn(cell, x) 

मतलब है कि आपके इनपुट डेटा में (batch_size, seq_length, N) आकार होना चाहिए। एक बैच में उदाहरण लंबाई बदलती है, तो आप अधिकतम लंबाई को 0-वैक्टर के साथ उन्हें पैड चाहिए और इसलिए करने के लिए पूरी तरह से RNNs आपको चाहिए समझते हैं, के लिए dynamic_rnn

जाहिर है मैं विवरण का एक बहुत छोड़ दिया गया है उचित sequence_length पैरामीटर पारित शायद उदाहरण के लिए this one जैसे कई उत्कृष्ट आरएनएन ट्यूटोरियल में से एक पढ़ें।

+0

इनपुट डेटा की लंबाई मनमानी होने पर आरएनएन कैसे बनाएं? –

+0

यदि 'इनपुट डेटा की लंबाई' से आपका मतलब बैच आकार है, तो आप अनियमित लंबाई के बैच पास करने में सक्षम होने के लिए x को आकार = (कोई नहीं, कोई नहीं, एन) 'घोषित कर सकते हैं। यदि आपका अनुक्रम लंबाई है, तो यह मेरे उत्तर में शामिल है। – Dzjkb

+0

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

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