tf.Session()和tf.InteractiveSession()有什么区别?


73

在这种情况下,应tf.Session()tf.InteractiveSession()被认为是出于什么目的?

当我尝试使用前一个功能时,某些功能(例如.eval())无法使用,而当我更改为后一个功能时,则可以使用。

Answers:


75

主要来自官方文档:

与常规会话的唯一区别在于,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支持更少的类型输入,因为它允许运行变量而无需不断引用会话对象。


2
彼此的缺点是什么?
skytree '18

25

Session和之间的唯一区别InteractiveSession是,它InteractiveSession使自己成为默认会话,因此您可以调用run()eval()不显式调用该会话。

如果您在python shell或Jupyter笔记本中尝试TF,这将很有帮助,因为它避免了传递显式Session对象来运行操作的麻烦。


1
链接断开。
skytree

1

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


这也许曾经是正确的,但现在已经不复存在了吗?我似乎记得曾经经历过这种差异,但是现在新的会话似乎每个都仅使用100MB的GPU RAM(版本1.13.1),而我无法粗略地搜索1.10、1.11, 1.12和1.13tf.InteractiveSession文档,以一种或另一种方式证明。
tsbertalan

-5

而不是上面提到的差异-最重要的差异是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]))

1
使用tf.InteractiveSession()不可能吗?
sirgogo '17

3
这是不正确的答案。在互动会议中也有可能
harveyslash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.