Ich habe die offizielle Dokumentation durchlaufen , aber immer noch nicht verstehen, was TimeDistributed
als Ebene im Keras-Modell tut?
Ich konnte den Unterschied zwischen TimeDistributed
und TimeDistributedDense
nicht verstehen. Wann verwendet jemand TimeDistributedDense
? Sollen nur die Trainingsdaten reduziert werden? Hat es andere Vorteile?
Kann jemand mit einem genauen Beispiel erklären, was diese zwei Arten von Layer-Wrappern bewirken?
Grundsätzlich wurde TimeDistributedDense
zuerst in frühen Keras-Versionen eingeführt, um eine Dense
-Schicht schrittweise auf Sequenzen anzuwenden. TimeDistributed
ist ein Keras-Wrapper, mit dem statische (nicht sequentielle) Ebenen abgerufen und sequentiell angewendet werden können. Wenn also z. Ihre Ebene akzeptiert als Eingabe etwas von Form (d1, .., dn)
dank TimeDistributed
wrapper könnte Ihre Ebene eine Eingabe mit der Form (sequence_len, d1, ..., dn)
akzeptieren, indem Sie eine Ebene anwenden, die für X[0,:,:,..,:]
, X[1,:,...,:]
, ...
, X[len_of_sequence,:,...,:]
bereitgestellt wird.
Ein Beispiel für eine solche Verwendung könnte die Verwendung eines z.B. Vorab trainierte Faltungsebene für einen kurzen Videoclip durch Anwenden von TimeDistributed(conv_layer)
, wobei conv_layer
auf jeden Frame eines Clips angewendet wird. Es erzeugt die Folge von Ausgaben, die dann von der nächsten wiederkehrenden oder TimeDistributed
-Ebene verbraucht werden können.
Es ist gut zu wissen, dass die Verwendung von TimeDistributedDense
abgeschrieben wird, und es ist besser, TimeDistributed(Dense)
zu verwenden.
TimeDistributedDense
ist das gleiche wie TimeDistributed
, mit dem einzigen Unterschied, dass TimeDistributed
mit verschiedenen Layer-Typen und nicht nur mit einem dichten Layer verwendet werden kann.
Die Keras-Dokumentation sagt das über TimeDistributed
:
"Beachten Sie, dass dies streng der Verwendung von layers.core.TimeDistributedDense
entspricht. Was TimeDistributed
jedoch unterscheidet, ist, dass es mit beliebigen Ebenen verwendet werden kann, nicht nur mit Dense, beispielsweise mit einer Convolution2D
-Schicht."