10

Próbuję uchwycić, co wrapper TimeDistributed ma w Keras.Jaka jest rola warstwy TimeDistributed w Keras?

Otrzymuję, że TimeDistributed "stosuje warstwę do każdego skrawka czasowego danych wejściowych."

Ale przeprowadziłem eksperyment i uzyskałem wyniki, których nie mogę zrozumieć.

W skrócie, w związku z warstwą LSTM, warstwa TimeDistributed i gęstej warstwy mają takie same wyniki.

model = Sequential() 
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True)) 
model.add(TimeDistributed(Dense(1))) 
print(model.output_shape) 

model = Sequential() 
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True)) 
model.add((Dense(1))) 
print(model.output_shape) 

Dla obu modeli, mam kształt wyjściowy (brak, 10, 1).

Czy ktoś może wyjaśnić różnicę między warstwą TimeDistributed i gęstą po warstwie RNN?

+0

Obecnie nie ma różnicy, [tutaj] (https://github.com/fchollet/keras/issues/278) dyskusja na ten temat. Myślę, że pierwotnym zamiarem było rozróżnienie warstwy "gęstej", spłaszczającej dane wejściowe, a następnie zmieniające kształt, a więc łączące różne stopnie czasowe i posiadające więcej parametrów, oraz "TimeDistributed", utrzymujące oddzielne przedziały czasowe (stąd mniej parametrów). W twoim przypadku 'Dense' powinno mieć 500 parametrów,' TimeDistributed' tylko 50 – gionni

+0

@gionni Nope, ma tę samą liczbę parametrów (obie 6). Więc nie ma praktycznie żadnej różnicy atm? –

+0

Tak, to jest liczba parametrów, które mieliby, gdyby istniała różnica. W tej chwili nie ma – gionni

Odpowiedz

7

W modelu keras - podczas budowania modelu sekwencyjnego - zwykle drugi wymiar (jeden po wymiarze próbki) - jest powiązany z wymiarem time. Oznacza to, że jeśli na przykład twoje dane to 5-dim z (sample, time, width, length, channel), możesz zastosować warstwę splotową przy użyciu TimeDistributed (która ma zastosowanie do 4-dim z (sample, width, length, channel)) wzdłuż wymiaru czasu (stosując tę ​​samą warstwę dla każdego wycinka czasowego), aby uzyskać wyjście 5-d .

Sprawa z Dense jest to, że w keras od wersji 2.0 Dense jest domyślnie stosowana tylko do ostatniego wymiaru (np jeśli stosuje Dense(10) do wejścia w kształcie (n, m, o, p) dostaniesz wyjście z kształtu (n, m, o, 10)), tak w przypadku Dense i TimeDistributed(Dense) są równoważne.

+1

Jeśli nie masz nic przeciwko, będę wdzięczny za przegłosowanie. –