我想知道以下两段代码之间有什么区别:
import tensorflow as tf
x = tf.Variable(0, name='x')
model = tf.initialize_all_variables()
with tf.Session() as session:
for i in range(5):
session.run(model)
x = x + 1
print(session.run(x))
import tensorflow as tf
x = tf.Variable(0, name='x')
model = tf.initialize_all_variables()
with tf.Session() as session:
for i in range(5):
x = x + 1
session.run(model)
print(session.run(x))
唯一的区别是"x =x+ 1“和”session.run(模型)“的顺序。我认为这将对输出产生很大的影响,因为session.run(模型)将初始化所有变量。但是,这两个代码块输出的内容是相同的.
代码是从教程中复制的:http://learningtensorflow.com/lesson2/
发布于 2016-06-22 16:42:36
是啊,这里有点棘手。Tensorflow的一个重要概念是延迟求值,这意味着首先建立节点的Tensorflow图,而图的求值只在session.run中进行。
对于这一行代码x=x+1,这里的x是类型的张量,这里的+是重载的tf.add,所以x=x+1实际上正在构建图,还没有进行计算;在每次迭代时,图(在本例中是二叉树)被添加了一个多层(多一个嵌套和)。Session.run(模型)总是将x初始化为0,session.run(x)将根据到目前为止在迭代中构造的图计算x。例如,在迭代4中,x被加1 4次,因为这个迭代中的图有4个嵌套和(或层)。
如果这对您有意义的话,我认为“两个代码本质上是相同的”也是有意义的。
注意:严格地说,在第一次迭代中,右边的x是类型变量,但这些是细节,不是我想要指出的要点.
https://stackoverflow.com/questions/37980020
复制相似问题