Tensorflow: Wie man alle Variablen aus rnn_cell.BasicLSTM & rnn_cell.MultiRNNCell
Ich ein setup haben wo ich zu initialisieren eines LSTM nach der eigentlichen Initialisierung verwendet tf.initialize_all_variables()
. I. e. Ich will rufen tf.initialize_variables([var_list])
Ist es Weg sammeln Sie alle internen trainierbar Variablen für beide:
- rnn_cell.BasicLSTM
- rnn_cell.MultiRNNCell
so, dass ich initialisieren kann NUR diese Parameter?
Der Hauptgrund, warum ich wollen, das ist, weil ich nicht wollen, zu re-initialisieren, einige trainierten Werte von früher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um Ihr problem zu lösen ist mit einem Variablen Umfang. Die Namen der Variablen innerhalb eines Bereichs wird als Präfix mit seinem Namen. Hier ein kurzes snippet:
Es würde funktionieren auf die gleiche Weise mit
MultiRNNCell
.EDIT: geändert
tf.trainable_variables
zutf.all_variables()
tf.trainable_variables()
Hinsicht Umfang, aber ich denke, im Nachhinein macht es Sinn!tf.all_variables()
statttf.trainable_variables()
wäre eine bessere Wahl. Vor allem, weil es gibt Dinge, wie Optimierer, die nicht trainierbar Variablen, die würde jedoch noch initialisiert werden müssen.v.name.startswith(vs.name + "/")
da könnte sich ein weiterer Bereich mit dem gleichen Präfix, z.B. "LSTM2".Können Sie auch
tf.get_collection()
:(teilweise kopiert von Rafal Antwort)
Beachten Sie, dass die Letzte Zeile entspricht der list-comprehension in Rafal code.
Grundsätzlich tensorflow speichert eine Globale Sammlung von Variablen, die abgerufen werden können, indem Sie entweder
tf.all_variables()
odertf.get_collection(tf.GraphKeys.VARIABLES)
. Wenn Sie angebenscope
(scope name) intf.get_collection()
- Funktion, dann hast du nur fetch-Tensoren (Variablen in diesem Fall) in der Sammlung, deren Bereiche sind unter dem angegebenen Geltungsbereich.BEARBEITEN:
Sie können auch
tf.GraphKeys.TRAINABLE_VARIABLES
zu bekommen trainierbar, nur Variablen. Aber da Vanille BasicLSTMCell nicht initialisiert wird, alle nicht-trainierbare variable, die sowohl funktional äquivalent. Für eine vollständige Liste der Standard-Grafik-Sammlungen, überprüfen diese aus.tf.get_collection(..., scope=vs.name + "/")
da könnte sich ein weiterer Bereich mit dem Namen "LSTM2" oder so.