RNNs (जैसे, LSTMs और Grus) के लिए, परत इनपुट है timesteps की एक सूची है, और प्रत्येक timestep है एक सुविधा टेन्सर। इसका मतलब है कि आपके पास इस तरह का इनपुट टेंसर हो सकता है (पाइथोनिक नोटेशन में):
# Input tensor to RNN
[
# Timestep 1
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
# Timestep 2
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
# Timestep 3
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
...
]
तो बिल्कुल, आप प्रत्येक टाइमस्टेप पर कई विशेषताएं रख सकते हैं। मेरे दिमाग में, मौसम एक समय श्रृंखला की विशेषता है: जहां मैं रहता हूं, यह समय का कार्य होता है। अतः मौसम की जानकारी को प्रत्येक टाइमस्टेप में अपनी एक विशेषता के रूप में (उचित एन्कोडिंग के साथ, जैसे बादल = 0, धूप = 1, आदि) को एनकोड करना काफी उचित होगा।
यदि आपके पास गैर-समय-श्रृंखला डेटा है, तो यह वास्तव में LSTM के माध्यम से इसे पारित करने का कोई मतलब नहीं है, हालांकि। हो सकता है कि LSTM वैसे भी काम करेगा, लेकिन फिर भी अगर ऐसा होता है, तो यह संभवत: प्रति प्रशिक्षण समय में अधिक नुकसान / कम सटीकता की लागत पर आएगा।
वैकल्पिक रूप से, आप अतिरिक्त परतों के माध्यम से LSTM के बाहर अपने मॉडल में इस तरह की "अतिरिक्त" जानकारी पेश कर सकते हैं। आपके पास इस तरह से डेटा प्रवाह हो सकता है:
TIME_SERIES_INPUT ------> LSTM -------\
*---> MERGE ---> [more processing]
AUXILIARY_INPUTS --> [do something] --/
इसलिए आप अपने सहायक इनपुट को LSTM आउटपुट में मर्ज करेंगे, और वहां से अपना नेटवर्क जारी रखेंगे। अब आपका मॉडल केवल मल्टी-इनपुट है।
उदाहरण के लिए, मान लें कि आपके विशेष एप्लिकेशन में, आप केवल LSTM आउटपुट अनुक्रम का अंतिम आउटपुट रखते हैं। मान लीजिए कि यह लंबाई का एक वेक्टर है 10. आप सहायक इनपुट आपके एन्कोडेड मौसम (एक स्केलर) हो सकते हैं। आपकी मर्ज की परत केवल LSTM आउटपुट वेक्टर के अंत में सहायक मौसम की जानकारी को जोड़ सकती है, जिसमें 11. की एक वेक्टर का उत्पादन किया जा सकता है। लेकिन आपको केवल आखिरी LSTM आउटपुट टाइमस्टेप रखने की आवश्यकता नहीं है : यदि LSTM ने 100 समयबद्ध आउटपुट दिए हैं, 10-वेक्टर सुविधाओं के साथ, आप अभी भी अपने सहायक मौसम की जानकारी से निपट सकते हैं, जिसके परिणामस्वरूप 100 टाइमस्टेप होते हैं, जिनमें से प्रत्येक में 11 डेटा पॉइंट्स के वेक्टर शामिल होते हैं।
अपने कार्यात्मक एपीआई पर केरस प्रलेखन का अच्छा अवलोकन है।
अन्य मामलों में, जैसा कि @horaceT बताते हैं, आप गैर-अस्थायी डेटा पर LSTM को कंडीशन करना चाह सकते हैं। उदाहरण के लिए, कल मौसम की भविष्यवाणी करें, स्थान दिया गया है। इस मामले में, यहां तीन सुझाव दिए गए हैं, जिनमें से प्रत्येक सकारात्मक / नकारात्मक हैं:
पहले टाइमस्टेप में अपने कंडीशनिंग डेटा रखें, क्योंकि यह प्रभावी रूप से आपके आरएनएन की आंतरिक / छिपी स्थिति को "सेट" करेगा। सच कहूं, तो मैं ऐसा नहीं करूंगा , कारणों की एक गुच्छा के लिए: आपके कंडीशनिंग डेटा को आपकी बाकी विशेषताओं के समान आकार की आवश्यकता होती है, जिससे आपको स्टेटफुल आरएनएन बनाने में मुश्किल होती है (वास्तव में सावधान रहने के संदर्भ में कि आप डेटा कैसे फ़ीड करते हैं नेटवर्क में), नेटवर्क पर्याप्त समय के साथ कंडीशनिंग डेटा को "भूल" सकता है (उदाहरण के लिए, लंबे प्रशिक्षण अनुक्रम, या लंबे पूर्वानुमान अनुक्रम, आदि)।
लौकिक डेटा के हिस्से के रूप में डेटा को शामिल करें। तो एक विशेष टाइमस्टेप पर प्रत्येक फीचर वेक्टर में "ज्यादातर" टाइम-सीरीज डेटा शामिल होता है, लेकिन फिर प्रत्येक फीचर वेक्टर के अंत में कंडीशनिंग डेटा जोड़ा जाता है। क्या नेटवर्क इसे पहचानना सीखेगा? शायद, लेकिन फिर भी, आप गैर-अनुक्रमिक जानकारी के साथ अनुक्रम डेटा को प्रदूषित करके एक कठिन शिक्षण कार्य बना रहे हैं। इसलिए मैं इसे भी हतोत्साहित करूंगा ।
संभवतः सबसे अच्छा तरीका समय पर शून्य पर आरएनएन के छिपे हुए राज्य को सीधे प्रभावित करना होगा। यह Karpathy और Fei-Fei द्वारा और Vinyals et al द्वारा लिया गया दृष्टिकोण है । यह इस तरह काम करता है:
- प्रत्येक प्रशिक्षण नमूने के लिए, अपनी स्थिति चर ।x⃗
- RNN की आंतरिक स्थिति: (इन रूप में इसे सही स्थिति में लाने के लिए अपनी स्थिति परिवर्तनशील चालों को एक परिर्वतन रूपांतर के साथ बदल दें / बदलें। और ट्रेन योग्य भार हैं)। आप इसे केरस में एक घने परत के साथ प्राप्त कर सकते हैं। W → bv⃗ =Wx⃗ +b⃗ Wb⃗
- पहले टाइमस्टेप के लिए, अपने मूल्य की गणना करते समय RNN के छिपे हुए राज्य में जोड़ें ।v⃗
यह दृष्टिकोण सबसे "सैद्धांतिक रूप से" सही है, क्योंकि यह आपके गैर-अस्थायी इनपुट पर आरएनएन को ठीक से स्थिति देता है, स्वाभाविक रूप से आकार की समस्या को हल करता है, और अतिरिक्त, गैर-अस्थायी जानकारी के साथ आपके इनपुट प्रदूषण को टालने से भी बचता है। नकारात्मक पक्ष यह है कि इस दृष्टिकोण को अक्सर आपके आर्किटेक्चर के ग्राफ-स्तर नियंत्रण की आवश्यकता होती है, इसलिए यदि आप कैर जैसे उच्च स्तर के अमूर्त का उपयोग कर रहे हैं, तो आपको इसे लागू करना मुश्किल होगा जब तक कि आप अपनी खुद की परत प्रकार नहीं जोड़ते।