如何赋值给tensorflowvariables?
我想在python中为tensorflowvariables赋值一个新的值。
import tensorflow as tf import numpy as np x = tf.Variable(0) init = tf.initialize_all_variables() sess = tf.InteractiveSession() sess.run(init) print(x.eval()) x.assign(1) print(x.eval())
但是我得到的结果是
0 0
所以价值没有改变。 我错过了什么?
语句x.assign(1)
实际上并不是将值1
赋值给x
,而是创build一个tf.Operation
,您必须显式运行以更新variables。*调用Operation.run()
或Session.run()
可以用来运行该操作:
assign_op = x.assign(1) sess.run(assign_op) # or `assign_op.op.run()` print(x.eval()) # ==> 1
(*实际上,它会返回一个tf.Tensor
,对应于variables的更新值,以便更容易链接分配。)
首先,您可以将值分配给variables/常量,方法是使用与占位符相同的方式将值input到variables/常量中。 所以这是完全合法的:
import tensorflow as tf x = tf.Variable(0) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print sess.run(x, feed_dict={x: 3})
关于你与tf.assign()运算符的混淆。 在TF中,在会话中运行它之前,没有任何东西被执行。 所以你总是要做这样的事情: op_name = tf.some_function_that_create_op(params)
,然后在会话中运行sess.run(op_name)
。 使用assign作为例子,你会做这样的事情:
import tensorflow as tf x = tf.Variable(0) y = tf.assign(x, 1) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print sess.run(x) print sess.run(y) print sess.run(x)
另外,必须注意的是,如果你正在使用your_tensor.assign()
,那么tf.global_variables_initializer
不需要显式调用,因为assign操作在后台为你做。
例:
In [212]: w = tf.Variable(12) In [213]: w_new = w.assign(34) In [214]: with tf.Session() as sess: ...: sess.run(w_new) ...: print(w_new.eval()) # output 34
但是,这不会初始化所有variables,但它只会初始化在其上执行assign
的variables。
有一个更简单的方法:
x = tf.Variable(0) x = x + 1 print x.eval()