节点的Tensorflow生命周期;
当评估两个变量TensorFlow时,不应重复使用先前评估中的值。(这是Aurélien Géron在机器学习与sklearn和TensorFlow手册中提到的) 以上面提到的代码为例。 如果在计算之间未修改x,则y和z应具有相同的值。 但我试着在评估之间修改它们的值,但它们仍然有相同的结果节点的Tensorflow生命周期;,tensorflow,machine-learning,tensorflow2.0,Tensorflow,Machine Learning,Tensorflow2.0,当评估两个变量TensorFlow时,不应重复使用先前评估中的值。(这是Aurélien Géron在机器学习与sklearn和TensorFlow手册中提到的) 以上面提到的代码为例。 如果在计算之间未修改x,则y和z应具有相同的值。 但我试着在评估之间修改它们的值,但它们仍然有相同的结果 with tf.compat.v1.Session() as sess: a = y.eval() x = w + 3 b = z.eval() 如果这是一个非常愚蠢的问题,我很抱
with tf.compat.v1.Session() as sess:
a = y.eval()
x = w + 3
b = z.eval()
如果这是一个非常愚蠢的问题,我很抱歉,但我只是想弄清楚我的基本知识,如果有人花时间来解释这一点,那将非常有帮助。谢谢
print(a)
# 366
print(b)
# 366
为了澄清您的疑问,在您的代码中
w = tf.constant(5)
x = w + 5
y = x**2 + 5
z = x**2 + 5
只需创建一个计算图,直到创建一个会话
,即使变量尚未初始化
在下面的代码中
with tf.compat.v1.Session() as sess:
a = y.eval()
x = w + 3
b = z.eval()
一旦会话打开,它将负责将所有操作放入正在使用的设备(CPU或GPU)中。它保存了里面的所有变量
在会话内部,一旦调用Tensorflow,就会自动确定它所依赖的节点,并首先计算这些节点,以解释您所采取的两种场景
1。a=y.eval()
这里y依赖于x,x依赖于w,所以它首先计算w,然后计算x来计算y
sess.run()
而不是eval()
调用sess.run()
时,此方法以以下方式完成图形中的一组计算:它从请求的输出开始,然后反向工作,计算必须根据依赖项集执行的节点
下面是具有所需结果的修改示例
import tensorflow as tf
w = tf.constant(5)
x = w + 5
y = x**2 + 5
x = w + 3
z = x**2 + 5
with tf.compat.v1.Session() as sess:
# a = y.eval()
# init.run()
# b = z.eval()
print(sess.run(z))
print(sess.run(y))
输出:
69
105
您可以注意到,当请求
sess.run(z)
时,反向立即x值是x=w+3
,类似于sess.run(y)
,而反向计算时,立即x值是x=w+5
为了澄清您的疑问,在您的代码中
w = tf.constant(5)
x = w + 5
y = x**2 + 5
z = x**2 + 5
只需创建一个计算图,直到创建一个会话
,即使变量尚未初始化
在下面的代码中
with tf.compat.v1.Session() as sess:
a = y.eval()
x = w + 3
b = z.eval()
一旦会话打开,它将负责将所有操作放入正在使用的设备(CPU或GPU)中。它保存了里面的所有变量
在会话内部,一旦调用Tensorflow,就会自动确定它所依赖的节点,并首先计算这些节点,以解释您所采取的两种场景
1。a=y.eval()
这里y依赖于x,x依赖于w,所以它首先计算w,然后计算x来计算y
sess.run()
而不是eval()
调用sess.run()
时,此方法以以下方式完成图形中的一组计算:它从请求的输出开始,然后反向工作,计算必须根据依赖项集执行的节点
下面是具有所需结果的修改示例
import tensorflow as tf
w = tf.constant(5)
x = w + 5
y = x**2 + 5
x = w + 3
z = x**2 + 5
with tf.compat.v1.Session() as sess:
# a = y.eval()
# init.run()
# b = z.eval()
print(sess.run(z))
print(sess.run(y))
输出:
69
105
您可以注意到,当请求sess.run(z)
时,当执行向后计算时,立即数x值为x=w+3
,与sess.run(y)
类似,立即数x值为x=w+5