Python Tensorflow:用tf.variable声明变量和直接声明变量有什么区别?

Python Tensorflow:用tf.variable声明变量和直接声明变量有什么区别?,python,tensorflow,Python,Tensorflow,我正在编写一个使用Tensorflow对两个数字进行加法和减法的小示例程序。然而,如果我将变量声明为tf.variable,或者直接声明它,我会收到不同的结果。所以我想知道这两种方法之间的区别是什么,因为我感觉到有一个关于TF的基本知识是我不知道的,是它驱使我走向错误。 代码如下: x= tf.Variable(tf.random_uniform([], minval= -1, maxval= 1)) y= tf.Variable(tf.random_uniform([], minval= -1

我正在编写一个使用Tensorflow对两个数字进行加法和减法的小示例程序。然而,如果我将变量声明为tf.variable,或者直接声明它,我会收到不同的结果。所以我想知道这两种方法之间的区别是什么,因为我感觉到有一个关于TF的基本知识是我不知道的,是它驱使我走向错误。 代码如下:

x= tf.Variable(tf.random_uniform([], minval= -1, maxval= 1))
y= tf.Variable(tf.random_uniform([], minval= -1, maxval= 1))
#declare 2 tf variables with initial value randomly generated.

# A 'case' statement to perform either addition or subtraction
out = tf.case({tf.less(x, y): lambda: tf.add(x, y), tf.greater(x, y): lambda: tf.subtract(x, y)}, default= lambda: tf.zeros([]), exclusive= True)

#Run the graph
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    x_value = x.eval()
    y_value = y.eval()
    print("{}\n".format(x_value - y_value))
    out_value, sub_value, add_value = sess.run([out, subtf, addtf])

#Example output: x_value = 0.53607559
                 y_value = -0.63836479
                 add_value = -0.1022892
                 sub_value = 1.1744404
                 out_value = 1.1744404
如您所见,case语句工作正常,操作正常。 但是,如果我在x和y的声明中省略tf.变量,事情就会变得很混乱:

x= tf.random_uniform([], minval= -1, maxval= 1)
y= tf.random_uniform([], minval= -1, maxval= 1)
.... All the same as above

#Sample answer run on Spyder: x_value = -0.91663623
                              y_value = -0.80014014
                              add_value = 0.26550484 , should be =-1.71677637
                              sub_value = -0.19451094, should be -0.11649609
                              out_value = 0.26550484, , should be =-1.71677637
正如您所看到的,case语句和操作仍然执行一致,但答案是错误的。
我不明白为什么答案不同?

当您在中声明变量时

x_var = tf.Variable(tf.random_uniform([], minval= -1, maxval= 1))
随机值存储在变量中,除非通过赋值操作进行更改

或者,声明

x_op = tf.random_uniform([], minval= -1, maxval= 1)
定义每次调用时生成新随机数的操作

例如:

# After calling
sess.run(tf.global_variables_initializer())

sess.run(x_var) # Will return the same randomly generated value every time
sess.run(x_op) # Will return a different random value every time

我希望这有助于解释为什么代码的第二个版本的行为不同。

当您在中声明变量时

x_var = tf.Variable(tf.random_uniform([], minval= -1, maxval= 1))
随机值存储在变量中,除非通过赋值操作进行更改

或者,声明

x_op = tf.random_uniform([], minval= -1, maxval= 1)
定义每次调用时生成新随机数的操作

例如:

# After calling
sess.run(tf.global_variables_initializer())

sess.run(x_var) # Will return the same randomly generated value every time
sess.run(x_op) # Will return a different random value every time
我希望这有助于解释为什么代码的第二个版本表现不同