Tensorflow: Neu hinzugefügte Variablen können nicht gespeichert werden

Erstellt am 24. Mai 2016  ·  1Kommentar  ·  Quelle: tensorflow/tensorflow

Ich habe getestet, indem ich diese 3 Codeteile ausgeführt habe.

Zuerst einige Variablen initiieren und speichern.

import tensorflow as tf

sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
sess.run(tf.initialize_all_variables())
saver = tf.train.Saver()
saver.save(sess,'v12.ckpt')

Stellen Sie dann die Sitzung wieder her, fügen Sie eine weitere Variable hinzu und speichern Sie.

import tensorflow as tf

sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
saver = tf.train.Saver()
saver.restore(sess,'v12.ckpt')  #works fine here

v3 = tf.Variable(3,name="v3")
sess.run(tf.initialize_variables([v3]))

saver.save(sess,'v123.ckpt')

print v3.eval() #show value without problem

Stellen Sie sie dann wieder her.

import tensorflow as tf

sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
v3 = tf.Variable(3,name="v3")

saver = tf.train.Saver()
saver.restore(sess,'v123.ckpt') #error here

Dies ist der Fehler:

tensorflow.python.framework.errors.NotFoundError: Tensor name "v3" not found in checkpoint files v123.ckpt [[Node: save/restore_slice_2 = RestoreSlice[dt=DT_INT32, preferred_shard=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/restore_slice_2/tensor_name, save/restore_slice_2/shape_and_slice)]] Caused by op u'save/restore_slice_2'

Was ist hier das Problem?

Ich verwende Version r0.8 auf Ubuntu16.04

Hilfreichster Kommentar

Wenn Sie ein tf.train.Saver ohne Argumente erstellen, wird beim Speichern und Wiederherstellen implizit der aktuelle Satz von Variablen _zum Zeitpunkt der Saver-Konstruktion_ verwendet. Wenn Sie eine neue Variable hinzufügen (zB v3 in Ihrem zweiten Codeblock), müssen Sie eine neue tf.train.Saver erstellen, um sie zu speichern.

import tensorflow as tf

sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
saver = tf.train.Saver()
saver.restore(sess,'v12.ckpt')  #works fine here

v3 = tf.Variable(3,name="v3")
sess.run(tf.initialize_variables([v3]))

saver_with_v3 = tf.train.Saver()
saver_with_v3.save(sess,'v123.ckpt')

>Alle Kommentare

Wenn Sie ein tf.train.Saver ohne Argumente erstellen, wird beim Speichern und Wiederherstellen implizit der aktuelle Satz von Variablen _zum Zeitpunkt der Saver-Konstruktion_ verwendet. Wenn Sie eine neue Variable hinzufügen (zB v3 in Ihrem zweiten Codeblock), müssen Sie eine neue tf.train.Saver erstellen, um sie zu speichern.

import tensorflow as tf

sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
saver = tf.train.Saver()
saver.restore(sess,'v12.ckpt')  #works fine here

v3 = tf.Variable(3,name="v3")
sess.run(tf.initialize_variables([v3]))

saver_with_v3 = tf.train.Saver()
saver_with_v3.save(sess,'v123.ckpt')
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen