如何获取变量的当前值?

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 的最终值。

【讨论】:

以上是关于如何获取变量的当前值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从不同的会话中获取 Windows 环境变量的当前值

bat脚本如何获取环境变量字面值(请看问题说明再回答)?

在线性问题中定义多个约束后,获取当前可能接受的变量边界

如何获取数组里对象的某个值

js中如何获取当前浏览器的地址的值

如何获取当前范围/符号表中定义的所有变量?