tf.reset_default_graph()
a = tf.Variable(0.2, name="a")
b = tf.Variable(0.3, name="b")
z = tf.constant(0.0, name="z0")
for i in range(100):
z = a * tf.cos(z + i) + z * tf.sin(b - i)
grad = tf.gradients(z, [a, b])
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print("z:", z.eval())
print("grad", grad.eval())
t = tf.constant(42.0)
sess = tf.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.get_default_session()
assert t.eval() == sess.run(t)
最重要的区别是,您可以使用sess.run()在同一步骤中获取许多张量的值:
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
eval()
无法处理列表对象但是
Session.run()
可以如果我错了就纠正我
关于张量流的FAQ会话有一个answer to exactly the same question。我就把它留在这里:
如果
t
是一个Tensor
对象,t.eval()
是sess.run(t)
(其中sess
是当前默认会话)的缩写。以下两段代码是等效的:在第二个示例中,会话充当上下文管理器,其效果是在
with
块的生命周期中将其安装为默认会话。上下文管理器方法可以为简单的用例(如单元测试)带来更简洁的代码;如果您的代码处理多个图和会话,那么显式调用Session.run()
可能更简单。我建议你至少浏览一下整个FAQ,因为它可能会澄清很多事情。
如果您有一个} 等同于调用
Tensor
t,调用^{tf.get_default_session().run(t)
。您可以将会话设为默认会话,如下所示:
最重要的区别是,您可以使用
sess.run()
在同一步骤中获取许多张量的值:注意,对} 。
eval
和run
的每个调用都将从头开始执行整个图。要缓存计算结果,请将其分配给^{相关问题 更多 >
编程相关推荐