2

Ich versuche, ein mehrschichtiges rekurrentes neuronales Netzwerk mit GRU-Einheiten (sowie LSTM-Einheiten) in Tensorflow zu erstellen. Ich habe mir mehrere Quellen angesehen, einschließlich des offiziellen Tutorials. Aber ich sehe das folgende Muster für mehrschichtige RNNs (hier mit GRU-Einheiten gezeigt).Erstellen mehrschichtiger rekurrenten neuronalen Netzwerk in Tensorflow

cell = GRUCell(num_neurons) # Or LSTMCell(num_neurons) 
cell = DropoutWrapper(cell, output_keep_prob=dropout) 
cell = MultiRNNCell([cell] * num_layers) 

Dieser Codeausschnitt stammt aus RNN Tensorflow Introduction. Mein Verständnis von [cell] * num_layers ist, dass das gleiche Objekt cell in der Liste num_layer mal referenziert wird. Also, wird nicht die MultiRNNCell erstellen ein tiefes Netzwerk, wo jeder Layer die gleichen Gewichte wie die vorherigen hat. Wenn jemand klären kann, was genau hier passiert, wäre das sehr aufschlussreich.

+0

Zunächst ja. Die Gewichte sind für jede Schicht der GRU/LSTM-Einheiten gleich. Aber wie das neuronale Netz lernt, sollen diese Gewichte aktualisiert werden. Wenn Sie also eine gestapelte RNN (GRU/LSTM) erstellen, müssen Sie 'tf.nn.dynamic_rnn (cell, x, initial_state = Hin)' haben. Von dem, was ich verstehe, wird das "Hin" die Zustände der GRU/LSTM-Einheiten tragen, das heißt, es hat auch die Gewichte pro Schicht. –

Antwort

2

Ich gehe davon aus, dass Sie die Konzepte und das Ausführungsmodell von TensorFlow bereits gut verstehen. Wenn nicht, schauen Sie sich bitte die Tutorials auf Tensorflow.org an, insbesondere die Variablen.

Der Konstruktor von GRUCell fügt dem Graph keine Knoten hinzu. Nur wenn Sie die Instanz (d. H. Cell()) aufrufen, werden Variablen und Operationen zum Graphen hinzugefügt. Wenn MultiRNNCell aufgerufen wird, erstellt es verschiedene Variable Scopes, bevor es die Sublayer aufruft. Auf diese Weise hat jede Schicht ihre eigenen Variablen.

Verwandte Themen