在这种情况下,应tf.Session()
与tf.InteractiveSession()
被认为是出于什么目的?
当我尝试使用前一个功能时,某些功能(例如.eval()
)无法使用,而当我更改为后一个功能时,则可以使用。
Answers:
主要来自官方文档:
与常规会话的唯一区别在于,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
支持更少的类型输入,因为它允许运行变量而无需不断引用会话对象。
在根据官方文档将自身安装为默认会话的基础上,通过一些内存使用测试,似乎交互式会话使用了gpu_options.allow_growth = True选项-请参阅[using_gpu#allowing_gpu_memory_growth]-而tf.Session()由默认分配整个GPU内存。
tf.InteractiveSession
文档,以一种或另一种方式证明。
而不是上面提到的差异-最重要的差异是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]))