Python 如果不需要初始化就可以直接使用变量,为什么要在tensorflow中使用tf.Variable?
在tensorflow中,我们以两种方式使用变量:Python 如果不需要初始化就可以直接使用变量,为什么要在tensorflow中使用tf.Variable?,python,tensorflow,machine-learning,neural-network,deep-learning,Python,Tensorflow,Machine Learning,Neural Network,Deep Learning,在tensorflow中,我们以两种方式使用变量: 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)
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)
所以我们都知道,对于使用第1种方法,我们必须初始化变量,否则它将抛出一个“未初始化变量”错误。但是他们不需要对第二种方法进行初始化。
所以我的问题是,为什么我们要在张量流中使用第一种方法或tf.变量?它们是否对此有任何特定用途?
TensorFlow.add
返回一个TensorFlow.Tensor
类型。如果像在第一个方法中一样将其强制转换为TensorFlow.Variable
,则必须对其进行初始化,但会获得一些功能,因为变量
是一个具有高级功能的Tensor
包装器
例如,变量
可以存在于单个session.run调用的上下文之外,这与张量
()不同
因此,它完全取决于您的情况。
TensorFlow.add
返回一个TensorFlow.Tensor
类型。如果像在第一个方法中一样将其强制转换为TensorFlow.Variable
,则必须对其进行初始化,但会获得一些功能,因为变量
是一个具有高级功能的Tensor
包装器
例如,变量
可以存在于单个session.run调用的上下文之外,这与张量
()不同
因此,这完全取决于您的情况。您应该在tensorflow中考虑4种类型的张量:
- 占位符-这些是张量,用于查找通过
传入的值,作为feed\u dict
调用的一部分sess.run
- 变量-这些变量是可变张量,可将其值从一次执行
保存到下一次执行。这些是在整个会话期间保持其状态的唯一张量类型sess.run
- 计算张量(OPs/运算)-这些是计算值,例如
,在调用tf.add(a,b)
结束时,该值被丢弃(或返回)。它们只是计算出来的sess.run
- 常数-例如
tf.常数(12)
sess.run
,都会计算并丢弃OP。这就是你在方法2中所做的。您执行了一个计算,并提供了执行该计算所需的一切(两个常量)。因此tensorflow执行了请求的计算,将结果返回给您,然后丢弃结果
注意方法#1中的一个独特差异。如果您要在将来的某个时间使用
sess.run(ans)
请求ans
的值,它只需检索变量的值并返回它(不执行任何计算)。在方法#2中,如果您将来使用sess.run(ans1)
请求ans1
的值,它将不得不再次为您执行计算。您应该考虑tensorflow中的4种张量:
- 占位符-这些是张量,用于查找通过
传入的值,作为feed\u dict
调用的一部分sess.run
- 变量-这些变量是可变张量,可将其值从一次执行
保存到下一次执行。这些是在整个会话期间保持其状态的唯一张量类型sess.run
- 计算张量(OPs/运算)-这些是计算值,例如
,在调用tf.add(a,b)
结束时,该值被丢弃(或返回)。它们只是计算出来的sess.run
- 常数-例如
tf.常数(12)
sess.run
,都会计算并丢弃OP。这就是你在方法2中所做的。您执行了一个计算,并提供了执行该计算所需的一切(两个常量)。因此tensorflow执行了请求的计算,将结果返回给您,然后丢弃结果
注意方法#1中的一个独特差异。如果您要在将来的某个时间使用sess.run(ans)
请求ans
的值,它只需检索变量的值并返回它(不执行任何计算)。在方法#2中,如果您将来使用sess.run(ans1)
请求ans1
的值,它将不得不再次为您执行计算