Der Unterschied zwischen "dichten" und "zeitlich verteilt" von "Keras"
-
16-10-2019 - |
Frage
Ich bin immer noch verwirrt über den Unterschied zwischen Dense
und TimeDistributedDense
von Keras
Auch wenn bereits einige ähnliche Fragen gestellt werden hier und hier. Die Menschen diskutieren viel, aber keine gemeinsamen Schlussfolgerungen.
Und obwohl auch hier, @Fchollet erklärte:
TimeDistributedDense
gilt gleichDense
(Voller vernetzter) Betrieb zu jedem Zeitschritt eines 3D-Tensors.
Ich brauche immer noch eine detaillierte Abbildung darüber, was genau der Unterschied zwischen ihnen ist.
Lösung
Nehmen wir an, Sie haben Zeitreihendaten mit $ n $ Zeilen und 700 $ $ Spalten, die Sie an a füttern möchten SimpleRNN(200, return_sequence=True)
Schicht in Keras. Bevor Sie dies dem RNN füttern, müssen Sie die vorherigen Daten an einen 3D -Tensor umgestalten. Es wird also zu einem $ n mal 700 mal 1 $.
$ $
Das Bild wird von entnommen https://colah.github.io/posts/2015-08-VERSTINGINGING-LSTMS
$ $
In RNN sind Ihre Spalten (die "700 Spalten") die Zeitschritte von RNN. Ihre Daten werden von $ t = 1 bis 700 $ verarbeitet. Nachdem die Daten an den RNN gefüttert wurden, haben sie jetzt 700 Ausgänge, die $ H_1 $ bis $ H_ {700} $ sind, nicht $ H_1 $ bis $ H_ {200} $. Denken Sie daran, dass die Form Ihrer Daten nun $ n mal 700 mal 200 $ beträgt, was ist Proben (die Zeilen) x Timesteps (die Spalten) x Kanäle.
Und dann, wenn Sie a anwenden TimeDistributedDense
, Sie beantragen a Dense
Schichten Sie auf jedem Zeitschritt, was bedeutet, dass Sie a anwenden Dense
Layer auf jedem $ H_1 $, $ H_2 $, ..., $ H_T $. Was bedeutet: Tatsächlich wenden Sie den vollständigen Betrieb auf jedem seiner Kanäle (die "200" an, von $ h_1 $ bis $ H_ {700} $. Die 1. "$ 1 Times 1 mal 200 $" bis zum 700. "$ 1 Times 1 mal 200 $".
Warum machen wir das? Weil Sie die RNN -Ausgabe nicht verflachten möchten.
Warum nicht die RNN -Ausgabe abflachen? Weil Sie jede Zeitschrittwerte getrennt halten möchten.
Warum sollten jede Zeitstufe getrennt bleiben? Da:
- Sie möchten nur die Werte zwischen seinem eigenen Zeitschritt interagieren
- Sie möchten keine zufällige Interaktion zwischen verschiedenen Zeitschritten und Kanälen haben.