在tensorflowbian编程思想中,我们说到每个计算图都必须要在一个会话Session中执行。本节主要讲会话的作用以及怎么使用会话。
1. 会话(Session)的作用
会话(Session)可以管理*TensorFlow运行时的所有资源。 计算图都是在Sesstion中运行的,因此会话中拥有很多资源,并且Sesstion可以对这些资源进行管理。例如,当所有计算完成后,可以使用Session.close()释放会话资源*,这样的资源管理可以避免资源浪费。
2. 会话的生成方式
主要有:
- 函数生成法
tf.sesstion()
- 上下文管理器
with tf.sesstion() as sess
- 默认会话
with sess.as_default()
- 交互式会话
tf.InteractiveSession()
2.1 使用 tf.sesstion() 函数生成法
#创建一个会话
sess = tf.Session()
#使用这个会话可以得到张量的结果,例如sess.run(result)
sess.run(op)
#关闭会话
sess.close()
注:
最后需要加上
来关闭会话
sess.close()
2.2 使用 上下问管理器
#创建一个会话,通过上下文管理器管理会话
with tf.Session() as sess:
sess.run(op)
2.3 使用 默认会话
在前面计算图我们知道,可以指定某个计算图为默认图,同样的,我们用函数tf.session()
生成的sess,可以使用sess.as_default()
方法手动指定默认会话。
a = tf.constant([1.0])
b = tf.constant([2.0])
output = a + b
sess = tf.Session()
with sess.as_default():
print(result.eval()) #计算张量的结果
2.4 使用交互式会话
交互式环境下,比如iPython,直接使用tf.InteractiveSession()
构造默认会话.那么Tensor.eval() 和 Operation.run() 方法会使用这个默认会话去执行操作。
sess=tf.InteractiveSession()
a=tf.constant(5)
b=tf.Variable(3)
init_op = tf.global_variables_initializer() #变量同样需要先初始化
c=tf.multiply(a,b)
sess.run(init_op)
print (sess.run(c))
3. tf.InteractiveSession()与tf.Session()的区别
tf.InteractiveSession()实际上构建了一个默认会话,且 Tensor.eval() 和 Operation.run() 方法会使用这个默认会话去执行操作 run ops.
tf.Session()需要在启动session之前先构建整个计算图,然后启动该计算图。
tf.InteractiveSession()可以先构建一个session然后再定义操作(operation),主要最后要
sess.close()