TensorFlow有两种方法来计算图的一部分:在变量列表上的Session.run和tensoreval .eval。这两者之间有什么区别吗?
如果你有一个张量t,调用t.e eval()等价于调用tf.get_default_session().run(t)。
设置会话为默认会话的方法如下:
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和run的每次调用都将从头执行整个图。要缓存计算结果,将其赋值给tf.Variable。
关于张量流的常见问题解答有一个完全相同的问题的答案。我把它放在这里
如果t是一个张量对象,t.e 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,因为它可能会澄清很多事情。
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中,您可以创建图并将值传递给该图。Graph完成所有的艰苦工作,并根据您在图中所做的配置生成输出。 现在,当你向图传递值时,首先你需要创建一个tensorflow会话。
tf.Session()
一旦会话初始化,您就应该使用该会话,因为所有变量和设置现在都是会话的一部分。有两种方法将外部值传递给图形,让图形接受它们。一种方法是在使用正在执行的会话时调用.run()。
另一种基本的快捷方式是使用.eval()。我之所以说快捷方式是因为.eval()的完整形式是
tf.get_default_session().run(values)
你可以自己检查一下。 在values.eval()的位置运行tf.get_default_session().run(values)。你必须得到相同的行为。
eval所做的是使用默认会话,然后执行run()。
最重要的是要记住:
从TenorFlow获得常量、变量(任何结果)的唯一方法是会话。
知道这一点很容易:
tf.Session.run()和tf.Tensor.eval()都从会话中获取结果,其中tf.Tensor.eval()是调用tf.get_default_session().run(t)的快捷方式
我还将在这里概述tf.Operation.run()方法:
图在会话中启动后,可以通过将其传递给tf.Session.run()来执行操作。op.run()是调用tf.get_default_session().run(op)的快捷方式。
Tensorflow 2。x兼容答案:将mrry的代码转换为Tensorflow 2。X(>= 2.0)为社区的利益。
!pip install tensorflow==2.1
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
t = tf.constant(42.0)
sess = tf.compat.v1.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.compat.v1.get_default_session()
assert t.eval() == sess.run(t)
#The most important difference is that you can use sess.run() to fetch the values of many tensors in the same step:
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.multiply(t, u)
ut = tf.multiply(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
推荐文章
- 什么是sys。maxint在Python 3?
- 如何在Python中连接文本文件?
- Python:从列表中获取前10个结果
- Psycopg2:用一个查询插入多行
- 通过urllib和python下载图片
- 如何在Python中拆分这一长行?
- Python中带有回溯的日志异常
- 如何在python中删除特定字符后的所有字符?
- 谷歌Colab:如何从我的谷歌驱动器读取数据?
- Keras,如何得到每一层的输出?
- 当需要一个1d数组时,传递一个列向量y
- 在TensorFlow中,Session.run()和tensoreval()之间的区别是什么?
- 折叠单元在jupyter笔记本
- 从url读取csv
- 如何打印一个groupby对象