TensorFlow 运行模型 -- 会话
2019-03-17 14:55:03
•
阅读
打赏
本文将介绍如何使用TensorFlow 中的会话( session )来执行定义好的运算。会话拥有并管理 TensorFlow 程序运行时的所有资源。
所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题。
TensorFlow 中使用会话的模式一般有两种,第一种模式需要明确调用会话生成函数和关闭会话函数,这种模式的代码流程如下。
# 启动默认图.
sess = tf.Session()
# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出.
#
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
#
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
#
# 返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print(result) # [[ 12.]]
# 任务完成, 关闭会话.
sess.close()
使用这种模式时,在所有计算完成之后,需要明确调用 Session.close 函数来关闭会话并释放资源。
然而,当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源泄漏 。
为了解决异常退出时资源释放的问题, TensorFlow 可以通过 Python 的上下文管理器来使用会话。以下代码展示了如何使用这种模式。
#创建一个会话,并通过 Python 中的上下文管理器来管理这个会话。
with tf.Session() as sess :
#使用创建好的会话来计算关心的结果。
sess.run (...)
#不需要再调用“ Session.close ()”函数来关闭会话,
#当上下文退出时会话关闭和资源释放也自动完成了。
通过 Python 上下文管理器的机制,只要将所有的计算放在 “ with”的内部就可以 。 当上下文管理器退出时候会自动释放所有资源。
这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用 Session.close 函数而产生的资源泄漏。
交互式使用
文档中使用一个会话 Session 来启动图,并调用 Session.run() 方法执行操作。
为了便于使用诸如 IPython 之类的 Python 交互环境,使用 InteractiveSession 代替 Session 类,使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run()。
# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果
sub = tf.subtract(x, a)
print(sub.eval()) # [-2. -1.]
相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型