Welche Rolle spielt die TimeDistributed-Ebene in Keras?

82

Ich versuche zu verstehen, was der TimeDistributed-Wrapper in Keras macht.

Ich verstehe, dass TimeDistributed "eine Ebene auf jede zeitliche Schicht einer Eingabe anwendet".

Aber ich habe einige Experimente durchgeführt und die Ergebnisse erhalten, die ich nicht verstehen kann.

Kurz gesagt, in Verbindung mit der LSTM-Schicht erzielen TimeDistributed und Just Dense Layer dieselben Ergebnisse.

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)

Für beide Modelle habe ich die Ausgabeform (Keine, 10, 1) erhalten .

Kann jemand den Unterschied zwischen TimeDistributed und Dense Layer nach einem RNN Layer erklären?

Buomsoo Kim
quelle
1
Derzeit scheint es keinen Unterschied zu geben, hier eine Diskussion darüber. Ich denke, die ursprüngliche Absicht war es, zwischen der DenseEbene zu unterscheiden, die die Eingabe abflacht und dann umformt, TimeDistributedwodurch verschiedene Zeitschritte verbunden werden und mehr Parameter vorhanden sind und die Zeitschritte getrennt bleiben (daher weniger Parameter vorhanden sind). In Ihrem Fall Densesollte 500 Parameter haben, TimeDistributednur 50
gionni
@gionni Nein, es hat die gleiche Anzahl von Parametern (beide 6). Es gibt also praktisch keinen Unterschied atm?
Buomsoo Kim
Ja genau, das ist die Anzahl der Parameter, die sie hätten, wenn es einen Unterschied gäbe. Im Moment gibt es nicht
Gionni

Antworten:

82

Beim kerasErstellen eines sequentiellen Modells - normalerweise wird die zweite Dimension (eine nach der Beispieldimension) - mit einer timeDimension verknüpft . Dies bedeutet, dass Sie, wenn Ihre Daten beispielsweise 5-dimbei (sample, time, width, length, channel)Ihnen sind, eine Faltungsschicht anwenden können, indem Sie TimeDistributed(was für 4-dimmit gilt (sample, width, length, channel)) entlang einer Zeitdimension (die gleiche Schicht auf jede Zeitscheibe anwenden) verwenden, um zu erhalten5-d Ausgabe .

Der Fall mit Denseist, dass in kerasVersion 2.0 Densestandardmäßig nur auf die letzte Dimension angewendet wird (z. B. wenn Sie Dense(10)auf Eingaben mit Form anwenden , erhalten (n, m, o, p)Sie eine Ausgabe mit Form (n, m, o, 10)), also in Ihrem Fall Denseund TimeDistributed(Dense)gleichwertig.

Marcin Możejko
quelle
3
Es gibt ein Beispiel für die Verwendung von TimeDistributed, das das Modell selbst umschließt. Wenn dies auf einen InputTensor angewendet wird , gibt es einen Unterschied dazu im Vergleich zu einem mapModell, das auf eine Liste angewendet wird, die jeden Slice des Tensors enthält Input?
CMCDragonkai