2017-01-06 8 views
2

У меня есть следующий код для выполнения простых простых арифметических вычислений в распределенном тензорном потоке. Минимальный воспроизводимый пример может быть: -TypeError: переменная для сохранения не является переменной

import tensorflow as tf 

global_step_tensor = tf.Variable(10, trainable=False, name='global_step') 

cluster = tf.train.ClusterSpec({"local": ["localhost:2222", "localhost:2223","localhost:2224", "localhost:2225"]}) 
x = tf.constant(2) 

with tf.device("/job:local/task:0"): 
    y = x + 300 

model = tf.global_variables_initializer() 

saver = tf.train.Saver([y]) 

ChiefSessionCreator = tf.train.ChiefSessionCreator(scaffold=None, master='grpc://localhost:2222', config=None, checkpoint_dir='/home/chaitanya/tensorflow/codes/checkpoints') 
saver_hook = tf.train.CheckpointSaverHook(checkpoint_dir='/home/chaitanya/tensorflow/codes/checkpoints', save_secs=10, save_steps=None, saver=y, checkpoint_basename='model.ckpt', scaffold=None) 
summary_hook = tf.train.SummarySaverHook(save_steps=None, save_secs=10, output_dir='/home/chaitanya/tensorflow/codes/savepoints', summary_writer=None, scaffold=None, summary_op=y) 

with tf.train.MonitoredTrainingSession(master='grpc://localhost:2222', is_chief=True, checkpoint_dir='/home/chaitanya/tensorflow/codes/checkpoints', 
    scaffold=None, hooks=[saver_hook, summary_hook], chief_only_hooks=None, save_checkpoint_secs=10, save_summaries_steps=None, config=None) as sess: 

    while not sess.should_stop(): 
     sess.run(model) 

    while not sess.should_stop(): 
     result = sess.run(y) 
     print(result) 

Ниже ошибка: -

Traceback (most recent call last): 
    File "add_1.py", line 13, in <module> 
    saver = tf.train.Saver([y]) 
    raise TypeError("Variable to save is not a Variable: %s" % var) 
TypeError: Variable to save is not a Variable: Tensor("add_3:0", shape=(), dtype=int32, device=/job:local/task:3) 

Пожалуйста, помогите мне понять, как правильно использовать эту функцию.

+0

У вас нет строки 40 в предоставленном фрагменте кода – martianwars

+1

Это упрощенная версия кода. Я теперь отредактировал номер строки в ошибке. Пожалуйста, проверьте – itsamineral

+0

'y' - это тензор, а не переменная – martianwars

ответ

1

Когда вы просто пишете x + 300, вы не создаете tf.Variable. Для создания переменной, которую можно сохранить, необходимо явно использовать tf.get_variable() или tf.Variable().

y = tf.Variable(x + 300)