tf.Session()和tf.InteractiveSession()之间的区别是什么?

时间:2017-01-22 13:27:47

标签: tensorflow

在哪些情况下,tf.Session()tf.InteractiveSession()应考虑用于何种目的?

当我尝试使用前者时,某些功能(例如.eval())不起作用,当我改为后者时,它起作用了。

4 个答案:

答案 0 :(得分:64)

主要取自official文档:

  

与常规会话的唯一区别是InteractiveSession将自身安装为构造时的默认会话。方法Tensor.eval()和Operation.run()将使用该会话来运行操作。

这允许使用交互式上下文,比如shell,因为它避免了必须传递显式Session对象来运行op:

sess = tf.InteractiveSession()
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
# We can just use 'c.eval()' without passing 'sess'
print(c.eval())
sess.close()

还可以说,InteractiveSession支持更少的输入,因为允许运行变量而无需经常引用会话对象。

答案 1 :(得分:22)

SessionInteractiveSession之间的唯一区别是InteractiveSession使自己成为default session,以便您可以致电run()eval()没有明确调用会话。

如果您在python shell或Jupyter笔记本中试验TF,这会很有用,因为它可以避免必须传递显式的Session对象来运行操作。

答案 2 :(得分:1)

在根据official documentation将自身安装为默认会话的基础上,通过一些内存使用测试,似乎交互式会话使用了gpu_options.allow_growth = True选项-请参阅[using_gpu#allowing_gpu_memory_growth]-默认情况下,tf.Session()分配整个GPU内存。

答案 3 :(得分:-2)

与上述差异不同 - 最重要的区别在于session.run()我们可以一步获取多个张量的值。

例如:

num1 = tf.constant(5)
num2 = tf.constant(10)
num3 = tf.multiply(num1,num2)
model = tf.global_variables_initializer()

session = tf.Session()
session.run(model)

print(session.run([num2, num1, num3]))