2016-04-05 14 views
4

Ich versuche herauszufinden, wie ein gelerntes gespeichertes Modell als Teil eines größeren Modells importieren.Tensorflow: Übertragen von Variablen über Graphen

Um konkret zu sein, habe ich eine RNN und einige Einbettungsmatrizen (Modell A), die auf einen großen Datensatz in einer .ckpt-Datei gespeichert wurden. Ich habe auch ein anderes Modell (Modell B), das genau dieses RNN und Einbettungsmodell als Submodell verwendet, mit zusätzlichen Ops, um die Ausgabe dieser RNN zu manipulieren und sie für die Klassifizierung zu verwenden.

Die Diagrammdefinitionen für diese beiden Modelle sind unterschiedlich, aber ich möchte Modell B auf die gespeicherte Version von Modell A initialisieren. Wie kann dies geschehen?

Mein Versuch ist bisher zu versuchen, Modell A als ein anderes Modell unter einer anderen Sitzung und einem anderen Diagramm zu laden und dann die relevanten Matrizen in Modell B denen von A zuzuweisen, aber das funktioniert nicht.

Hier ist der relevante Teil des Codes:

sup = supervised() # spins up a class with an interactive session inside and sets up the graph 
g = tf.Graph() 
with g.as_default(): 
    unsup = unsupervised('unsup.ckpt') # loads in model A from file 
             # w/ another session (not interactive) 
    # get matrix from unsup and assign to sup 
    sup._word_embeddings.assign(unsup.session.run(unsup._word_embeddings)) 
    # do the same for the RNN 
    sup._gate_matrix.assign(unsup.session.run(unsup._gate_matrix)) 
    sup._gate_bias.assign(unsup.session.run(unsup._gate_bias)) 
    sup._cand_matrix.assign(unsup.session.run(unsup._cand_matrix)) 
    sup._cand_bias.assign(unsup.session.run(unsup._cand_bias)) 

Beachten Sie, dass beide Modelle auf die Matrizen von rnn_cell.linear für den RNN mit tf.get_variable() zugewiesen expliziten Variablen haben, wenn die Klasse instanziieren.

Vielen Dank im Voraus!

Antwort

1

Die Antwort erwies sich als so einfach. Dies war nur Erstellen der Assign-Ops ... Um die Zuweisung tatsächlich auszuführen, führen Sie die Ops in der entsprechenden Sitzung.

+1

Hallo, können Sie Ihre Lösung teilen? Danke – Sentient07

+0

Leider habe ich den Code für diese Hand nicht mehr. Im Grunde sind alle diese Zuweisungsoperatoren symbolische Ops, die auf 'g' definiert sind. Um sie auszuführen, müssen Sie' g' in einem 'session.run' ausführen. Hoffe das hilft. – Taaam

+0

Was ich beabsichtige ist, Gewichte für zwei verschiedene Modelle (die ich als zwei verschiedene Graphen betrachte) wiederherzustellen, dann möchte ich, dass die Ausgabe zuerst die Eingabe des zweiten Graphen ist – Sentient07

Verwandte Themen