Python tensorflow只保存初始化的值

Python tensorflow只保存初始化的值,python,machine-learning,tensorflow,Python,Machine Learning,Tensorflow,我正在尝试保存一些变量,看看是否可以稍后恢复。 这是我的保存代码: import tensorflow as tf; my_a = tf.Variable(2,name = "my_a"); my_b = tf.Variable(3,name = "my_b"); my_c = tf.Variable(4,name = "my_c"); my_c = tf.add(my_a,my_b); with tf.Session() as sess: i

我正在尝试保存一些变量,看看是否可以稍后恢复。 这是我的保存代码:

   import tensorflow as tf;
   my_a = tf.Variable(2,name = "my_a");
   my_b = tf.Variable(3,name = "my_b");
   my_c = tf.Variable(4,name = "my_c");
   my_c = tf.add(my_a,my_b);

   with tf.Session() as sess:
       init = tf.initialize_all_variables();
       sess.run(init);
       print("my_c =  ",sess.run(my_c));
       saver = tf.train.Saver();
       saver.save(sess,"test.ckpt");
这将打印出:

    my_c =   5
在我恢复时:

   import tensorflow as tf;
   c = tf.Variable(3100,dtype = tf.int32);
   with tf.Session() as sess:
       sess.run(tf.initialize_all_variables());
       saver = tf.train.Saver({"my_c":c});
       saver.restore(sess, "test.ckpt");
       cc= sess.run(c);
       print(cc);
这给了我:

    4

my_c的恢复值应为5,因为它是my_a和my_b的总和。但是它给了我4,这是我的_c的初始化值。有人能解释为什么会发生这种情况,以及如何保存对变量的更改吗

在原始代码中,您没有真正将名为
my_c
(请注意,TensorFlow
name
)的变量赋值给
my_a+my_b

通过编写
my_c=tf.add(my_a,my_b)
,python变量
my_c
现在不同于
tf.variable
具有
name='my_c'

执行
sess.run()
时,您只是在执行操作,而不是更新该变量

如果希望此代码正确运行,请改用此代码-(有关更改,请参阅注释)


感谢您的帮助。使用您的代码,它会在加载模型时报告错误:NotFoundError(回溯请参见上文):在检查点文件test.ckpt中找不到Tensor名称“my_c”。抱歉,请检查新答案。我以前的回答不是创建变量。TensorFlow只保存变量,而不是TensorFlow。谢谢。是否有其他方法可以在不定义操作变量或赋值的情况下更改命名变量?这似乎有点复杂,如果我有很多操作,就不方便了……官方文档似乎说你必须使用
assign()
。在大多数情况下,诚实地说,你不需要保存所有东西
import tensorflow as tf
my_a = tf.Variable(2,name = "my_a")
my_b = tf.Variable(3,name = "my_b")
my_c = tf.Variable(4,name="my_c")
# Use the assign() function to set the new value
add = my_c.assign(tf.add(my_a,my_b))

with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    # Execute the add operator
    sess.run(add)
    print("my_c =  ",sess.run(my_c))
    saver = tf.train.Saver()
    saver.save(sess,"test.ckpt")