Tensorflow: Novas variáveis ​​adicionadas não podem ser salvas

Criado em 24 mai. 2016  ·  1Comentário  ·  Fonte: tensorflow/tensorflow

Eu testei executando esses 3 pedaços de código respectivamente.

Primeiro, inicie algumas variáveis ​​e salve.

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')

Em seguida, restaure a sessão, adicione mais uma variável e salve.

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

Em seguida, restaure-os.

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

Este é o erro:

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'

Qual é o problema aqui?

Estou usando a versão r0.8 no Ubuntu16.04

Comentários muito úteis

Quando você cria um tf.train.Saver sem argumentos, ele usará implicitamente o conjunto atual de variáveis ​​_no momento da construção do Saver_ ao salvar e restaurar. Se você adicionar uma nova variável (por exemplo, v3 em seu segundo bloco de código), você deve criar um novo tf.train.Saver para salvá-lo.

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')

>Todos os comentários

Quando você cria um tf.train.Saver sem argumentos, ele usará implicitamente o conjunto atual de variáveis ​​_no momento da construção do Saver_ ao salvar e restaurar. Se você adicionar uma nova variável (por exemplo, v3 em seu segundo bloco de código), você deve criar um novo tf.train.Saver para salvá-lo.

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')
Esta página foi útil?
0 / 5 - 0 avaliações