Skip to main content
 首页 » 编程设计

python之TensorFlow:多次初始化变量

2024年08月21日30cyq1162

我对以下代码段的运行方式感到有些困惑。

import tensorflow as tf 
 
x = tf.Variable(0) 
init_op = tf.initialize_all_variables() 
modify_op = x.assign(5) 
 
with tf.Session() as sess: 
    sess.run(init_op) 
    print(sess.run(x)) 
    x += 3 
    print(sess.run(x)) 
    sess.run(init_op) # Trying to initialize x once again to 0 
    print(sess.run(x)) # Gives out 3, which leaves me confused. 
    print(sess.run(modify_op)) 
    print(sess.run(x)) # Gives out 8, even more confusing 

这是输出:
0
3
3
5
8

x += 3 行不是默认图形的一部分吗?或者其他事情正在发生?一些帮助将不胜感激,谢谢!

请您参考如下方法:

您的 x 变量正在被更改

x += 3 

但不是以您可能期望的方式。 tensorflow 库代码覆盖了 +,这样你就可以有效地将内容 x 换成新的 TF 张量(旧的仍然会在图中,只是 x现在指向一个新的)。像这样写出来:

x = tf.Variable(0) + 3 

而且更清楚发生了什么。另外,插入一些打印语句。 . .

x = tf.Variable(0) 
print(x) 
# <tensorflow.python.ops.variables.Variable object at 0x1018f5d68> 
 
x += 3 
print(x) 
# Tensor("add:0", shape=(), dtype=int32) 

如果 x 的内容对你很重要,那么如果你想跟踪/显示 x,请避免重新分配给 x 使用后面的变量名。或者,如果您没有方便的 Python 变量指向它,您始终可以命名张量并直接从图中获取它。重要的是习惯 TF 变量和 Python 变量之间的分离。

实际看到 TF 变量被赋值和重新设置,需要使用 TF 赋值运算符:

import tensorflow as tf 
 
x = tf.Variable( 0 ) 
 
with tf.Session() as session: 
    session.run( tf.initialize_all_variables() ) 
    print( x.eval() ) 
 
    session.run( x.assign( x + 3 ) ) 
    print( x.eval() ) 
 
    session.run( tf.initialize_all_variables() ) 
    print( x.eval() ) 

这个输出:

0 
3 
0 

如你所料。