Różnica między „Dense” a „TimeDistributionDense” w „Keras”

34

Ja nadal mylić o różnicę między Densei TimeDistributedDensena Keraschociaż istnieją już pewne podobne pytania zadawane tutaj i tutaj . Ludzie dużo dyskutują, ale nie uzgodniono wspólnie wniosków.

I chociaż tutaj @fchollet stwierdził, że:

TimeDistributedDensestosuje tę samą Dense(w pełni połączoną) operację do każdego pomiaru czasu tensora 3D.

Nadal potrzebuję szczegółowej ilustracji, jaka dokładnie jest różnica między nimi.

płynność03
źródło

Odpowiedzi:

41

Załóżmy, że masz dane szeregów czasowych z rzędami i kolumnami, które chcesz przesłać do warstwy w Keras. Zanim podasz to do RNN, musisz przekształcić poprzednie dane w tensor 3D. Staje się więc .N700SimpleRNN(200, return_sequence=True)N×700×1

rozwinięty RNN

Zdjęcie pochodzi z https://colah.github.io/posts/2015-08-Understanding-LSTMs

W RNN twoje kolumny („700 kolumn”) są znakami czasowymi RNN. Twoje dane są przetwarzane od . Po wprowadzeniu danych do RNN ma teraz 700 wyjść, które są w od do , a nie od do . Pamiętaj, że teraz kształt twoich danych to co oznacza próbki (wiersze) x kroki czasu (kolumny) x kanały .t=1 to 700h1h700h1h200N×700×200

A następnie, gdy zastosujesz a TimeDistributedDense, nakładasz Densewarstwę na każdym kroku czasu, co oznacza, że ​​nakładasz Densewarstwę odpowiednio na każdym , , ..., . Co oznacza: w rzeczywistości stosujesz w pełni połączoną operację na każdym z kanałów (odpowiednio „200”), od do . Pierwsze „ ” aż do 700. „ ”.h1h2hth1h7001×1×2001×1×200

Dlaczego to robimy? Ponieważ nie chcesz spłaszczać wyjścia RNN.

Dlaczego nie spłaszczyć wyjścia RNN? Ponieważ chcesz zachować osobne wartości timepep.

Dlaczego warto przechowywać osobne wartości timepep? Dlatego:

  • chcesz tylko oddziaływać na wartości między swoim czasem
  • nie chcesz mieć przypadkowej interakcji między różnymi krokami czasowymi i kanałami.
rilut
źródło
A następnie, gdy zastosujesz TimeDistributDense, nakładasz warstwę Gęsta na każdym takcie czasowym -> Czy to znaczy, że każdy krok czasowy ma taką samą wagę jak warstwa Gęsta? Czy warstwa Dense nie dotyczy tylko ostatniego pomiaru czasu?
o0omycomputero0o
2
Dlaczego TimeDistributionDense nie jest używany w przykładzie Keras na blog.keras.io/… ?
user1934212,
Ponieważ TimeDistributDense jest już przestarzałe. Od Keras 2.0 Dense dobrze
radzi