如何获取变量的当前值?
Posted
技术标签:
【中文标题】如何获取变量的当前值?【英文标题】:How do I get the current value of a Variable? 【发布时间】:2016-02-14 05:54:16 【问题描述】:假设我们有一个变量:
x = tf.Variable(...)
可以在训练过程中使用assign()
方法更新此变量。
获取变量当前值的最佳方法是什么?
我知道我们可以使用这个:
session.run(x)
但我担心这会引发一整套操作。
在 Theano 中,你可以这样做
y = theano.shared(...)
y_vals = y.get_value()
我正在 TensorFlow 中寻找等价的东西。
【问题讨论】:
【参考方案1】:因为他们在tensorflow 2.0.0
中取消了tf.Variable()
,
如果你想从tensor(ie "net")
中提取值,你可以使用这个,
net.[tf.newaxis,:,:].numpy().
【讨论】:
【参考方案2】:获取变量值的唯一方法是在session
中运行它。在FAQ it is written那个:
张量对象是操作结果的符号句柄, 但实际上并不保存操作输出的值。
所以 TF 等效项是:
import tensorflow as tf
x = tf.Variable([1.0, 2.0])
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
v = sess.run(x)
print(v) # will show you your variable.
init = global_variables_initializer()
的部分很重要,应该这样做以初始化变量。
另外,如果您使用 IPython,请查看 InteractiveSession。
【讨论】:
并且要非常清楚:运行变量只会产生变量的当前值;它将不运行任何与之关联的分配操作。很便宜。 @dga 是的,如果变量依赖于 n 个其他变量,它们也需要被评估。如果你想得到 many 的值,你可以这样做:a, b = sess.run([v1, v2])
【参考方案3】:
一般来说,session.run(x)
将仅评估计算 x
所需的节点,而不会评估其他任何内容,因此如果您想检查变量的值,它应该相对便宜。
查看这个很棒的答案https://***.com/a/33610914/5543198 了解更多上下文。
【讨论】:
【参考方案4】:tf.Print
可以简化你的生活!
tf.Print
将在评估代码时在代码中调用 tf.Print
行时打印您告诉它打印的张量的值。
例如:
import tensorflow as tf
x = tf.Variable([1.0, 2.0])
x = tf.Print(x,[x])
x = 2* x
tf.initialize_all_variables()
sess = tf.Session()
sess.run()
[1.0 2.0]
因为它在tf.Print
行出现时打印x
的值。如果你这样做
v = x.eval()
print(v)
你会得到:
[2.0 4.0]
因为它会给你 x 的最终值。
【讨论】:
以上是关于如何获取变量的当前值?的主要内容,如果未能解决你的问题,请参考以下文章