`केरस` के` डेंस` और `टाइमडिस्टेव्डडेंस` के बीच का अंतर


34

मैं अभी भी बीच अंतर के बारे में भ्रमित कर रहा हूँ Denseऔर TimeDistributedDenseकी Kerasभले ही पहले से ही कुछ इसी तरह के सवाल पूछे देखते हैं यहाँ और यहाँ । लोग बहुत चर्चा कर रहे हैं लेकिन कोई आम सहमति निष्कर्ष नहीं है।

और यहां तक ​​कि, यहाँ , @fchollet ने कहा कि:

TimeDistributedDenseDense3 डी टेंसर के हर टाइमस्टेप पर एक समान (पूरी तरह से जुड़ा हुआ) ऑपरेशन लागू करता है ।

मुझे अभी भी विस्तृत चित्रण की आवश्यकता है कि उनके बीच वास्तव में क्या अंतर है।

जवाबों:


41

मान लीजिए कि आपके पास पंक्तियों और 700 स्तंभों के साथ समय-श्रृंखला डेटा है, जिसे आप केरस में एक परत को खिलाना चाहते हैं । इससे पहले कि आप RNN को खिलाएं, आपको पिछले डेटा को 3D टेंसर में फिर से सेट करना होगा। तो यह एक N × 700 × 1 बन जाता है ।N700SimpleRNN(200, return_sequence=True)N×700×1

अनियंत्रित RNN

छवि 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 आउटपुट को समतल क्यों नहीं किया जा रहा है? क्योंकि आप प्रत्येक टाइमस्टेप मूल्यों को अलग रखना चाहते हैं।

प्रत्येक टाइमस्टेप मान को अलग क्यों रखें? इसलिये:

  • आप केवल अपने टाइमस्टेप के बीच के मूल्यों पर बातचीत करना चाहते हैं
  • आप अलग-अलग टाइमस्टेप और चैनलों के बीच एक यादृच्छिक बातचीत नहीं करना चाहते हैं।

और फिर, जब आप एक TimeDistributedDense लागू करते हैं, तो आप प्रत्येक टाइमस्टेप पर एक घने परत को लागू कर रहे हैं -> इसका मतलब है कि प्रत्येक टाइमस्टेप घने परत के वजन को साझा करता है? घने परत के साथ यह केवल अंतिम टाइमस्टेप पर लागू नहीं होता है?
o0omycomputero0o

2
TimeDistributedDense को Keras उदाहरण में blog.keras.io/… पर उपयोग क्यों नहीं किया जाता है ?
user1934212

क्योंकि TimeDistributedDense पहले से ही पदावनत है। Keras 2.0 के बाद से, घने अच्छी तरह से> 2-आयामी टेन्सर संभाल कर सकते हैं
rilut
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.