Tensorflow运行模型——会话
这一部分介绍如何使用Tensorflow中的会话(session)来执行定义好的运算。会话拥有并管理Tensorflow程序运行时的所有资源。所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题。Tensorflow中使用会话的模式一般有两种,第一种模式需要明确调用会话生成函数和关闭会话函数,这种模式的代码如下:
import tensorflow as tf
# 创建一个会话。
sess = tf.Session()
# 使用这个创建好的会话来得到关心的运算结果。
sess.run(result)# 其中result是运算结果,是一个张量
#关闭会话使得本次运行中使用到的资源可以被释放。
sess.close()
使用这种模式时,在所有计算完成之后,需要明确调用Session.close函数来关闭会话并释放资源。然而,当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源泄露。为了解决异常退出时资源释放的问题,Tensorflow可以通过Python的上下文管理器来使用会话。代码如下:
import tensorflow as tf
# 创建一个会话,并通过Python中的上下文管理器来管理这个会话。
with tf.Session() as sess:
# 使用创建好的会话来计算关心的结果。
sess.run(result)
# 不需要再调用“Session.close()”函数来关闭会话,
# 当上下文退出时会话关闭和资源释放也自动完成了。
通过Python上下文管理器的机制,只要将所有的计算放在"with"的内部就可以。当上下文管理器退出时候会自动释放所有资源。这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用Session.close函数而产生的资源泄露。
Tensorflow在计算时会自动生成一个默认的计算图,如果没有特殊指定,运算会自动加入这个计算图中。Tensorflow中的会话也有类似的机制,但Tensorflow不会自动生成默认的会话,而是需要手动指定。当默认的会话被指定之后可以通过tf.Tensor.eval函数来计算一个张量的取值。代码如下:
import tensorflow as tf
sess = tf.Session()
with sess.as_default():
print(result.eval)
以下代码也可以完成相同的功能。
sess = tf.Session()
# 以下两个命令也可以完成相同的功能
print(sess.run(result))
print(result.eval(session=sess))