मान लीजिए कि आपके पास पंक्तियों और 700 स्तंभों के साथ समय-श्रृंखला डेटा है, जिसे आप केरस में एक परत को खिलाना चाहते हैं । इससे पहले कि आप RNN को खिलाएं, आपको पिछले डेटा को 3D टेंसर में फिर से सेट करना होगा। तो यह एक N × 700 × 1 बन जाता है ।N700SimpleRNN(200, return_sequence=True)
N×700×1
छवि https://colah.github.io/posts/2015-08-Understanding-LSTMs से ली गई है
RNN में, आपके कॉलम ("700 कॉलम") RNN के टाइमस्टेप हैं। आपका डेटा से संसाधित होता है । आरएनएन को डेटा खिलाने के बाद, अब इसमें 700 आउटपुट हैं जो एच 1 से एच 700 हैं , एच 1 से एच 200 तक नहीं । याद रखें कि अब आपके डेटा का आकार N × 700 × 200 है जो नमूने (पंक्तियाँ) x टाइमस्टेप्स (कॉलम) x चैनल हैं ।t=1 to 700h1h700h1h200N×700×200
और फिर, जब आप एक लागू करते हैं, तो आप प्रत्येक टाइमस्टेप पर TimeDistributedDense
एक Dense
परत लागू कर रहे हैं , जिसका अर्थ है कि आप क्रमशः Dense
प्रत्येक , एच 2 , ..., एच टी पर एक परत लागू कर रहे हैं। जिसका अर्थ है: वास्तव में आप एच 1 से एच 700 तक क्रमशः अपने प्रत्येक चैनल ("200" एक) पर पूरी तरह से जुड़े ऑपरेशन को लागू कर रहे हैं । 1 " 1 × 1 × 200 " 700 "जब तक 1 × 1 × 200 "।h1h2hth1h7001×1×2001×1×200
हम यह क्यों कर रहे हैं? क्योंकि आप RNN आउटपुट को समतल नहीं करना चाहते हैं।
RNN आउटपुट को समतल क्यों नहीं किया जा रहा है? क्योंकि आप प्रत्येक टाइमस्टेप मूल्यों को अलग रखना चाहते हैं।
प्रत्येक टाइमस्टेप मान को अलग क्यों रखें? इसलिये:
- आप केवल अपने टाइमस्टेप के बीच के मूल्यों पर बातचीत करना चाहते हैं
- आप अलग-अलग टाइमस्टेप और चैनलों के बीच एक यादृच्छिक बातचीत नहीं करना चाहते हैं।