我是tensorflow的新手,我无法理解变量和常量的区别,我知道我们将变量用于方程式,将常量用于直接值,但是为什么代码#1仅工作,为什么代码#2和# 3,请说明在哪种情况下我们必须先运行图形(a),然后运行变量(b),即
(a) session.run(model) (b) print(session.run(y))
在这种情况下,我可以直接执行此命令,即
print(session.run(y))
代码1:
x = tf.constant(35, name='x') y = tf.Variable(x + 5, name='y') model = tf.global_variables_initializer() with tf.Session() as session: session.run(model) print(session.run(y))
代码2:
x = tf.Variable(35, name='x') y = tf.Variable(x + 5, name='y') model = tf.global_variables_initializer() with tf.Session() as session: session.run(model) print(session.run(y))
代码3:
x = tf.constant(35, name='x') y = tf.constant(x + 5, name='y') model = tf.global_variables_initializer() with tf.Session() as session: session.run(model) print(session.run(y))
在TensorFlow中,常量和变量之间的区别在于,当您声明某个常量时,其值以后将无法更改(而且初始化应使用值 而不是操作 )。
但是,在声明变量时,将来可以使用tf.assign()方法更改其值(并且可以通过值或操作来实现初始化)。
函数tf.global_variables_initializer()使用作为参数传递的值初始化代码中的所有变量,但它在异步模式下工作,因此当变量之间存在依赖关系时,该函数将无法正常工作。
您的第一个代码(#1)正常工作,因为不依赖于变量初始化,并且常量是用值构造的。
由于的异步行为,第二个代码(#2)不起作用tf.global_variables_initializer()。您可以使用tf.variables_initializer()对其进行修复,如下所示:
tf.global_variables_initializer()
x = tf.Variable(35, name='x') model_x = tf.variables_initializer([x]) y = tf.Variable(x + 5, name='y') model_y = tf.variables_initializer([y]) with tf.Session() as session: session.run(model_x) session.run(model_y) print(session.run(y))
第三个代码(#3)无法正常工作,因为您试图通过操作初始化常量,这是不可能的。要解决此问题,适当的策略是(#1)。
关于您的最后一个问题。(a) session.run(model)当计算图中有变量时,您需要运行(b) print(session.run(y))。
(a) session.run(model)
(b) print(session.run(y))