3.6 Session 会话

会话拥有并管理TensorFlow运行时所有的物理资源(例如GPU和网络连接),所以当所有计算完成之后需要关闭会话帮助系统回收资源,否则容易发生资源的泄露。以下提供三种常见的会话模式来避免资源的泄露。

1.4.1 会话模式1

如图7明确调用 Session.close()函数来关闭会话并释放资源,这样比较简单,但是当程序异常退出时,关闭会话函数可能不会被执行,从而导致资源泄露,该方法一般不推荐。

1.4.2 会话模式2

如图8所示,会话模式2使用try … except … finally…语句可以确保关闭会话使本次运行中所使用到的资源被释放。

1.4.3 会话模式3

会话模式3使用Python的上下文管理器来管理这个会话,保证在程序执行完后,推出上下文便可关闭会话和释放资源。

TensorFlow不会自动生成默认的会话,需要手动指定,当默认的会话指定之后可以通过 tf.Tensor.eval函数来计算一个张量的取值。

在交互式环境下,也就是Python脚本或者Jupyter Notebook编辑器下,通过设置默认的对话来获取张量的取值更加方便,使用tf.InteractiveSession这个函数会自动将生成的会话注册为默认会话。

> 示例代码

1.py
# 定义计算图
tens1 = tf.constant([1,2,3])

# 创建一个会话
sess = tf.Session()

#使用这个创建好的会话来得到关心的运算的结果。比如可以调用 sess.run(result)
#来得到张量result的取值
print(sess.run(tens1))

#关闭会话使得本次运行中使用到的资源可以被释放
sess.close()
2.py
# 定义计算图
tens1 = tf.constant([1,2,3])

# 创建一个会话
sess = tf.Session()
try:
#使用这个创建好的会话来得到关心的运算的结果。比如可以调用 sess.run(result)
#来得到张量result的取值
    print(sess.run(tens1))
except:
    print("Exception!")
finally:
#关闭会话使得本次运行中使用到的资源可以被释放
    sess.close()
3.py
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
result = tf.add(node1, node2)

#创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
    #使用这创建好的会话来计算关心的结果
    print(sess.run(result))

# 不需要再调用 Session.close() 函数来关闭会话
# 当上下文退出时会话关闭和资源释放也自动完成了

Last updated