2017-04-10 2 views
1

Wenn Sie in Keras eine LSTM-Ebene mit 10 Einheiten hinzufügen möchten, verwenden Sie model.add(LSTM(10)). Ich habe gehört, dass die Nummer 10 als die Anzahl der versteckten Einheiten here und als die Anzahl der Ausgabeeinheiten (Zeile 863 des Keras-Codes here) bezeichnet wird.Keras LSTM: erstes Argument

Meine Frage ist, sind diese beiden Dinge gleich? Ist die Dimensionalität der Ausgabe gleich der Anzahl der versteckten Einheiten? Ich habe ein paar Tutorials gelesen (wie this one und this one), aber keiner von ihnen gibt dies explizit an.

Antwort

0

Um eine gute Intuition zu bekommen, warum dies sinnvoll ist. Denken Sie daran, dass der LSTM-Job eine Sequenz in einen Vektor kodiert (vielleicht eine grobe Vereinfachung, aber alles, was wir brauchen). Die Größe dieses Vektors durch hidden_units angegeben ist, die output ist:

seq vector   RNN weights 
(1 X input_dim) * (input_dim X hidden_units), 

das 1 X hidden_units hat (ein Zeilenvektor die Codierung der Eingangssequenz darstellt). Und so werden die Namen in diesem Fall synonym verwendet.

Natürlich erfordern RNNs mehr als eine Multiplikation und Keras implementiert RNNs als eine Sequenz von Matrix-Matrix-Multiplikationen statt der oben gezeigten Vektormatrix.

+1

Dies scheint zu implizieren, dass die Anzahl der versteckten Einheiten die Anzahl der Ausgabeeinheiten ist, aber ich denke, das sind zwei getrennte Dinge - ein LSTM kann eine Sequenz in eine andere Sequenz codieren, wie Sie sagen, aber es kann auch gehen eine Sequenz zu einer reellen Zahl, oder? Also ist die versteckte Darstellung nicht unbedingt die gleiche wie die Ausgabe. – StatsSorceress

1

Die Anzahl der versteckten Einheiten ist nicht die gleiche wie die Anzahl der Ausgabeeinheiten.

Die Anzahl 10 die Dimension des Ausgangs versteckten Zustand steuert (Quellcode für das Verfahren LSTM Konstruktor kann here finden. 10 gibt die units Argument). In einem der Tutorial ist haben Sie verknüpft (colah's blog), würde die Einheiten Argument steuern, um die Dimension der Vektoren h t-1, h t und h t + 1: RNN image .

Wenn Sie die Anzahl der LSTM-Blöcke in Ihrem Netzwerk steuern möchten, müssen Sie dies als Eingabe für die LSTM-Ebene angeben. Die Eingabeform für den Layer lautet (nb_samples, timesteps, input_dim) Keras documentation. timesteps steuert, wie viele LSTM-Blöcke Ihr Netzwerk enthält. Unter Bezugnahme auf das Tutorial auf Colas Blog wieder, in RNN image, würde Zeitschritte steuern, wie viele grüne Blöcke das Netzwerk enthält.