在张量流中,我们以两种方式使用变量:
a = tf.constant(12)
b = tf.constant(10)
#NOW SAY I WANT TO ADD THESE TWO
#1st method
ans = tf.Variable(tf.add(a, b))
# Initialize the variable
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
print(sess.run(ans))
#2nd method
ans1 = tf.add(a, b)
sess = tf.Session()
sess.run(ans1)
因此我们都知道,对于使用第一种方法,我们必须初始化变量,否则它会抛出"未初始化变量"的错误。但是他们不需要为第二种方法进行初始化。 所以我的问题是为什么我们在张量流中使用第一种方法或tf.Variable?他们是否具体使用了这个?
答案 0 :(得分:1)
您应该考虑张量流中的4种张量:
feed_dict
来电时通过sess.run
找到传入的值。sess.run
的一次执行到下一次。这是在会议期间维持其状态的唯一类型的张量。tf.add(a,b)
,在sess.run
调用结束时丢弃(或返回)该值。它们只是计算的。tf.constant(12)
变量需要精确初始化,因为它们保持状态,因此需要初始状态。这就是你必须在方法#1中运行初始化程序的原因。
另一方面,OP计算并在每次调用sess.run
时被丢弃。这就是你在方法#2中所做的。您执行了计算,并提供了执行该计算所需的所有内容(两个常量)。因此,tensorflow执行所请求的计算,将结果返回给您,然后丢弃结果。
注意方法#1的独特区别。如果您要在ans
的某个时间点请求sess.run(ans)
的值,它将只检索变量的值并返回它(不执行任何计算)。在方法#2中,如果您将来使用ans1
请求sess.run(ans1)
的值,则必须再次为您执行计算。
答案 1 :(得分:0)
TensorFlow.add
会返回TensorFlow.Tensor
类型。如果您将第一种方法转换为TensorFlow.Variable
,则必须对其进行初始化,但是您获得了多项功能,因为Variable
是具有高级功能的Tensor
包装器。
例如,Variable
可以存在于单个session.run调用的上下文之外,与Tensor
(see the doc)不同。
因此,这完全取决于您的需求。