在哪些情况下,tf.Session()
和tf.InteractiveSession()
应考虑用于何种目的?
当我尝试使用前者时,某些功能(例如.eval()
)不起作用,当我改为后者时,它起作用了。
答案 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)
Session
与InteractiveSession
之间的唯一区别是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]))