Obwohl Sie die Variablen nicht manuell definiert haben, enthält das obige Code-Snippet tatsächlich 15 speicherbare Variablen. Sie können sie mit dieser internen tensorflow Funktion siehe:
from tensorflow.python.ops.variables import _all_saveable_objects
for obj in _all_saveable_objects():
print(obj)
Für den Code oben, es erzeugt die folgende Liste:
<tf.Variable 'fully_connected/weights:0' shape=(100, 50) dtype=float32_ref>
<tf.Variable 'fully_connected/biases:0' shape=(50,) dtype=float32_ref>
<tf.Variable 'fully_connected_1/weights:0' shape=(50, 2) dtype=float32_ref>
<tf.Variable 'fully_connected_1/biases:0' shape=(2,) dtype=float32_ref>
<tf.Variable 'Variable:0' shape=() dtype=int32_ref>
<tf.Variable 'beta1_power:0' shape=() dtype=float32_ref>
<tf.Variable 'beta2_power:0' shape=() dtype=float32_ref>
<tf.Variable 'fully_connected/weights/Adam:0' shape=(100, 50) dtype=float32_ref>
<tf.Variable 'fully_connected/weights/Adam_1:0' shape=(100, 50) dtype=float32_ref>
<tf.Variable 'fully_connected/biases/Adam:0' shape=(50,) dtype=float32_ref>
<tf.Variable 'fully_connected/biases/Adam_1:0' shape=(50,) dtype=float32_ref>
<tf.Variable 'fully_connected_1/weights/Adam:0' shape=(50, 2) dtype=float32_ref>
<tf.Variable 'fully_connected_1/weights/Adam_1:0' shape=(50, 2) dtype=float32_ref>
<tf.Variable 'fully_connected_1/biases/Adam:0' shape=(2,) dtype=float32_ref>
<tf.Variable 'fully_connected_1/biases/Adam_1:0' shape=(2,) dtype=float32_ref>
Es gibt Variablen aus beiden fully_connected
Schichten und einige mehr kommen von Adam Optimierer (siehe this question). Beachten Sie, dass in dieser Liste keine Platzhalter für X
und Y
vorhanden sind. Sie müssen daher nicht ausgeschlossen werden. Natürlich existieren diese Tensoren im Meta-Diagramm, aber sie haben keinen Wert und sind daher nicht speicherbar.
Die _all_saveable_objects()
Liste ist, was Tensorflow Saver standardmäßig speichert, wenn die Variablen nicht explizit angegeben werden. Daher einfach die Antwort auf Ihre wichtigste Frage ist:
saver = tf.train.Saver() # all saveable objects!
with tf.Session() as sess:
tf.global_variables_initializer().run()
saver.save(sess, "...")
Es gibt keine Möglichkeit, den Namen für die tf.contrib.layers.fully_connected
Funktion zur Verfügung zu stellen (als Ergebnis, wird es gespeichert als fully_connected_1/...
), aber du bist zu tf.layers.dense
wechseln ermutigt, was hat ein name
Argument. Um zu sehen, warum es sowieso eine gute Idee ist, werfen Sie einen Blick auf this und this discussion.
Danke für die Antwort @Maxim. Wirklich schätzen Sie Ihre Zeit. –