TensorFlow变量和常量

发布于 2021-01-29 15:06:38

我是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))
关注者
0
被浏览
104
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在TensorFlow中,常量和变量之间的区别在于,当您声明某个常量时,其值以后将无法更改(而且初始化应使用值
    而不是操作 )。

    但是,在声明变量时,将来可以使用tf.assign()方法更改其值(并且可以通过值或操作来实现初始化)。

    函数tf.global_variables_initializer()使用作为参数传递的值初始化代码中的所有变量,但它在异步模式下工作,因此当变量之间存在依赖关系时,该函数将无法正常工作。

    您的第一个代码(#1)正常工作,因为不依赖于变量初始化,并且常量是用值构造的。

    由于的异步行为,第二个代码(#2)不起作用tf.global_variables_initializer()。您可以使用tf.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))



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看