tf中的run()与eval()【转载】

转自:https://blog.csdn.net/jiaoyangwm/article/details/79248535 

1.eval() 其实就是tf.Tensor的Session.run() 的另外一种写法,但两者有差别:

※eval(): 将字符串string对象转化为有效的表达式参与求值运算返回计算结果
※eval()也是启动计算的一种方式。基于Tensorflow的基本原理,首先需要定义图,然后计算图,其中计算图的函数常见的有run()函数,如sess.run()。同样eval()也是此类函数,
※要注意的是,eval()只能用于tf.Tensor类对象,也就是有输出的Operation。对于没有输出的Operation, 可以用.run()或者Session.run();Session.run()没有这个限制。
2.

3.

如果你有一个Tensor t,在使用t.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()在同一步获取多个tensor中的值, 
例如:

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,然后获取。

//就是针对一个tensor来说,eval和run 没有区别,要传入多个需要用run.

2019-3-21更————

sess.run中第一个参数是你要执行的Tensor,第二个是要feed的参数,是字典。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/10552249.html