TensorFlow: wenn Sie die Variablen aus, die von mehreren Prüfpunkten
Ich habe die folgende situation:
-
Habe ich 2 Modelle geschrieben in 2 separaten scripts:
-
Modell besteht aus den Variablen
a1
,a2
, unda3
, und ist geschrieben inA.py
-
Modell B besteht aus Variablen
b1
,b2
, undb3
, und ist geschrieben in der B. py
In jedem A.py
und B.py
, ich habe eine tf.train.Saver
das spart den checkpoint aller lokalen Variablen, und nennen wir die checkpoint-Dateien ckptA
und ckptB
bzw.
Möchte ich nun zu einem Modell C, verwendet a1
und b1
. Ich kann es so machen, dass die exakt gleiche variable Namen für a1
verwendet wird, in A und C mithilfe der var_scope (und das gleiche für b1
).
Die Frage ist, wie kann ich laden a1
und b1
aus ckptA
und ckptB
in Modell C? Zum Beispiel würde das folgende funktionieren?
saver.restore(session, ckptA_location)
saver.restore(session, ckptB_location)
Würde ein Fehler ausgelöst, wenn Sie versuchen, die Wiederherstellung derselben Sitzung zweimal? Würde es beklagen, dass es keine reservierten "slots" für die zusätzlichen Variablen (b2
, b3
, a2
, a3
), oder würde es einfach wieder die Variablen, die es können, und nur meckern, wenn es einige andere Variablen in C, die noch nicht initialisiert sind?
Ich versuche, code zu schreiben, um dies zu testen, aber ich würde gerne sehen, einen kanonischen Ansatz für dieses problem, da trifft man diese oft, wenn Sie versuchen, wieder zu verwenden, einige vor-trainiert-GEWICHTE.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie eine
tf.errors.NotFoundError
wenn Sie versucht haben, verwenden Sie einen Bildschirmschoner (standardmäßig stellvertretend für alle sechs Variablen), um eine Wiederherstellung von einem checkpoint, der enthält nicht alle Variablen, die der Sparer darstellt. (Beachten Sie jedoch, dass Sie frei sind zu nennenSaver.restore()
mehrmals in der gleichen Sitzung, für eine beliebige Teilmenge der Variablen, so lange, wie alle der angeforderten Variablen in die entsprechende Datei.)Den kanonischen Ansatz zu definieren zwei separate
tf.Zug.Saver
Instanzen Abdeckung jede Teilmenge der Variablen ist, die allein in einer einzigen checkpoint. Zum Beispiel:Je nachdem, wie dein code aufgebaut ist, wenn Sie den Zeiger auf
tf.Variable
Objekte, die alsa1
undb1
im lokalen Bereich, Sie können hier aufhören zu Lesen.Auf der anderen Seite, wenn die Variablen
a1
undb1
definiert, die in separaten Dateien, die Sie benötigen könnten, etwas kreatives zu machen abrufen Zeiger auf diese Variablen. Es ist zwar nicht ideal, was die Menschen in der Regel tun, ist zu verwenden eine gemeinsame Präfix, zum Beispiel wie folgt (vorausgesetzt, die Variablen-Namen sind"a1:0"
und"b1:0"
jeweils):Eine Letzte Anmerkung: Sie haben nicht um heroische Anstrengungen, um sicherzustellen, dass die Variablen haben die gleichen Namen in A und C. Sie können übergeben Sie eine name-zu-
Variable
Wörterbuch als erstes argument an dietf.train.Saver
Konstruktor, und damit die Neuzuordnung Namen in der checkpoint-DateiVariable
Objekte in Ihrem code. Dieses hilft, wennA.py
undB.py
haben ähnlich benannten Variablen, oder wenn inC.py
Sie möchten, organisieren die Modell-code aus den Dateien in einemtf.name_scope()
.Variable
anzeigen, wenna1
hat einen anderen Namen in den checkpoint. Standardmäßig, dieSaver
Konstruktor verwendet dieVariable.name
Eigenschaft zu suchen, diese bis.