如何赋值给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()