Diyelim ki Keras'ta bir katmana beslemek istediğiniz satırlı ve sütunlu zaman serisi verileriniz var . Bunu RNN'ye vermeden önce, önceki verileri bir 3D tensöre yeniden şekillendirmeniz gerekir. Böylece .N700SimpleRNN(200, return_sequence=True)
N×700×1
Görüntü https://colah.github.io/posts/2015-08-Understanding-LSTMs adresinden alınmıştır.
RNN'de sütunlarınız ("700 sütun"), RNN'in zamanlamalarıdır. Verileriniz arasında işlenir . Verileri RNN'ye besledikten sonra, şimdi ila olan ila olan 700 çıkışı vardır . Şimdi verilerinizin şeklinin , numuneler (satırlar) x timesteps (sütunlar) x kanalları olan olduğunu unutmayın .t=1 to 700h1h700h1h200N×700×200
Bir uyguladığınızda Ve sonra, TimeDistributedDense
, bir uyguluyorsanız Dense
bir uygulamadan başka deyişle, her timestep üzerinde bir tabaka Dense
her biri üzerinde bir tabaka , , ..., sırasıyla. Bu da demek oluyor ki: aslında tam olarak bağlı bir işlemi, her bir kanalına (sırasıyla "200" olan) ye . 1 " 700" kadar " ".h1h2hth1h7001×1×2001×1×200
Bunu neden yapıyoruz? Çünkü RNN çıkışını düzleştirmek istemiyorsunuz.
RNN çıkışını neden düzleştirmiyorsunuz? Çünkü her bir timestep değerini ayrı tutmak istiyorsun.
Neden her bir timestep değerini ayrı tutuyorsun? Çünkü:
- sadece kendi zaman aralığı arasındaki değerleri etkileşimde bulunmak istiyorsun
- Farklı timestepsler ve kanallar arasında rastgele bir etkileşim yaşamak istemezsiniz.