首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow无法还原现有变量的保存值

TensorFlow无法还原现有变量的保存值
EN

Stack Overflow用户
提问于 2017-03-21 03:26:45
回答 1查看 165关注 0票数 1

我试图保存一个值在初始化后被更改的变量。然后我恢复模型,但恢复的值仍然是这个变量的初始值,为什么在保存模型时它不恢复变量的当前值?

这是我的代码:

代码语言:javascript
复制
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.]]

显然,这里恢复的值不是我打算保存的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 10:59:13

你对TF的运作方式有误解。您在第3行中定义的TF变量在初始化后不会更改其值。

代码语言:javascript
复制
a = a + np.random.randint(0, 5, (3, 2))

这不改变TF变量,它向图中添加节点以创建一个张量,即变量和所创建的numpy数组之和。TF变量的值仍然是零,python变量现在指向张量,即和(因此python变量a不再指向TF变量)。

若要更改TF变量的值,请使用以下内容

代码语言:javascript
复制
sess.run(tf.assign(a, a + np.random.randint(0, 5, (3, 2))))

这样,就可以用新值更新TF变量,python变量仍然指向TF变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42917894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档