我试图保存一个值在初始化后被更改的变量。然后我恢复模型,但恢复的值仍然是这个变量的初始值,为什么在保存模型时它不恢复变量的当前值?
这是我的代码:
import tensorflow as tf
import numpy as np
a = tf.Variable(tf.zeros([3, 2]), name='a')
saver = tf.train.Saver()
tf_config = tf.ConfigProto(allow_soft_placement=True)
tf_config.gpu_options.allow_growth = True
sess = tf.InteractiveSession(config=tf_config)
tf.global_variables_initializer().run()
print(a.eval())
#[[ 0. 0.]
# [ 0. 0.]
# [ 0. 0.]]
a = a + np.random.randint(0, 5, (3, 2))
print(a.eval())
#[[ 0. 3.]
# [ 2. 3.]
# [ 0. 3.]]
saver.save(sess, './model/model.ckpt')
a = a - np.random.randint(0, 5, (3, 2))
print(a.eval())
#[[-1. 3.]
# [ 2. 2.]
# [-4. 3.]]
saver.restore(sess, './model/model.ckpt')
print(a.eval())
#[[-1. 3.]
# [ 2. 2.]
# [-4. 3.]]显然,这里恢复的值不是我打算保存的值。
发布于 2017-03-21 10:59:13
你对TF的运作方式有误解。您在第3行中定义的TF变量在初始化后不会更改其值。
a = a + np.random.randint(0, 5, (3, 2))这不改变TF变量,它向图中添加节点以创建一个张量,即变量和所创建的numpy数组之和。TF变量的值仍然是零,python变量现在指向张量,即和(因此python变量a不再指向TF变量)。
若要更改TF变量的值,请使用以下内容
sess.run(tf.assign(a, a + np.random.randint(0, 5, (3, 2))))这样,就可以用新值更新TF变量,python变量仍然指向TF变量。
https://stackoverflow.com/questions/42917894
复制相似问题