python - tensor取值 - tf variable eval




在TensorFlow中,Session.run()和Tensor.eval()有什么区别? (4)

TensorFlow有两种评估图的一部分的方式: Session.run 变量列表和 Tensor.eval 。 两者之间有区别吗?


关于张量流的FAQ会话对 完全相同的问题 有一个 答案 。 我将继续并将其留在此处:

如果 t 是一个 Tensor 对象,则 t.eval()sess.run(t) 简写(其中 sess 是当前的默认会话。以下两个代码段是等效的:

sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)

c = tf.constant(5.0)
with tf.Session():
  print c.eval()

在第二个示例中,会话充当上下文管理器,其作用是在 with 块的生存期内将其安装为默认会话。 上下文管理器方法可以为简单的用例(如单元测试)生成更简洁的代码; 如果您的代码处理多个图形和会话,则显式调用 Session.run() 可能更直接。

我建议您至少在整个FAQ中略读一遍,因为它可能会阐明很多事情。


在tensorflow中,您可以创建图并将值传递给该图。 Graph会做所有的工作,并根据您在图中进行的配置来生成输出。 现在,当您将值传递给图形时,首先需要创建一个tensorflow会话。

tf.Session()

会话初始化后,您应该使用该会话,因为所有变量和设置现在都属于该会话。 因此,有两种方法可以将外部值传递给图,以便图接受它们。 一种是在使用正在执行的会话时调用.run()。

基本上是此方法的捷径的其他方法是使用.eval()。 我说捷径是因为.eval()的完整形式是

tf.get_default_session().run(values)

您可以自己检查。 在 values.eval() 运行 tf.get_default_session().run(values) 。 您必须得到相同的行为。

eval正在使用默认会话,然后执行run()。


要记住的最重要的事情:

从TenorFlow获取常量,变量(任何结果)的唯一方法是会话。

知道这一切很 easy

tf.Session.run()tf.Tensor.eval() 都从会话中获取结果,其中 tf.Tensor.eval() 是调用 tf.get_default_session().run(t) 的快捷方式

我还将在 here 概述方法 tf.Operation.run()

在会话中启动图形后,可以通过将其传递给 tf.Session.run() 来执行操作。 op.run() 是调用 tf.get_default_session().run(op) 的快捷方式。


eval() 无法处理列表对象

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())

但是 Session.run() 可以

print("grad", sess.run(grad))

如果我错了请纠正我





tensorflow