Keras'ın “Yoğun” ile “TimeDistributedDense” arasındaki fark


34

Hala arasındaki fark hakkında karıştı Denseve TimeDistributedDensebir Keraszaten bazı benzer sorular soruldu bulunmasına rağmen burada ve burada . İnsanlar çok tartışıyorlar ancak ortak olarak kabul edilmiş sonuçlar yok.

Ve yine de, burada , fchollet şunu belirtti:

TimeDistributedDenseDense3B tensörün her zaman adımına aynı (tam olarak bağlı) işlemi uygular.

Tam olarak aralarındaki farkın ne olduğuna dair ayrıntılı bir resme ihtiyacım var.

Yanıtlar:


41

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

kontrolsüz RNN

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 Densebir uygulamadan başka deyişle, her timestep üzerinde bir tabaka Denseher 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.

Ve sonra, bir TimeDistributedDense uyguladığınızda, her zaman adımına bir Yoğun katman uygularsınız -> Bu, her zaman adımının Yoğun katmanın ağırlığını paylaştığı anlamına mı gelir? Yoğun katmanla sadece son zaman aralığı için geçerli değil mi?
o0omycomputero0o

2
Neden TimeDistributedDense blog.keras.io/… adresindeki Keras örneğinde kullanılmıyor ?
user1934212

Çünkü TimeDistributedDense zaten kullanımdan kaldırıldı. Keras 2.0 beri Yoğun iyi> 2 boyutlu tensörünü işleyebilir
rilut
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.