TensorFlow之会话

发布 : 2019-01-29 分类 : 深度学习 浏览 :

会话

创建

方法一

1
2
3
4
5
6
7
8
import tensorflow as tf

# 创建一个会话
sess = tf.Session()
# 使用这个创建好的会话来得到关心的运算的结果。比如可以调用sess.run(result),
# 来得到张量result的取值
sess.run(...)
# 关闭会话使得本次运行中使用到的资源可以被释放

方法二

1
2
3
4
5
6
7
import tensorflow as tf
# 创建一个会话,并通过Python中的上下文管理器来管理这个会话。
with tf.Session() as sess:
# 使用这创建好的会话来计算关心的结果。
sess.run(...)
# 不需要再调用“Session.close()”函数来关闭会话,
# 当上下文退出时会话关闭和资源释放也自动完成。

第一种方法在程序因为意外退出时,关闭会话的函数可能就不会被执行从而导致资源泄露,第二种方法避免了此问题。

会话中张量的取值

方法一

1
2
3
4
5
6
7
8
import tensorflow as tf

a = tf.constant([1.0],name="a")
b = tf.constant([2.0],name="b")
result = a + b
sess = tf.Session()
with sess.as_default():
print(result .eval())

方法二

1
2
3
4
5
import tensorflow as tf
sess = tf.Session()
# 下面两种方法均能输出
print(sess.run(result))
print(result.eval(session=sess))

设置默认会话

通过InteractiveSession函数可以省去将产生的会话注册为默认会话的过程,看下面例子

1
2
3
4
5
6
7
import tensorflow as tf
a = tf.constant([1.0],name="a")
b = tf.constant([2.0],name="b")
result = a + b
sess = tf.InteractiveSession()
print(result.eval())
sess.close()

ConfigProto

当它为True时,通过ConfifProto可以配置类似并行的线程数、GPU分配策略、运算超时时间等参数。最常用的有两个:

allow_soft_placement

参数类型:布尔型

功能:

在以下任意一个条件成立的时候,GPU上的运算可以放到CPU上进行:

  • 运算无法在GPU上执行
  • 没有GPU资源(比如运算被指定在第二个GPU上运行,但是机器只有一个GPU)。
  • 运算输入包含对CPU计算结果的引用

    log_device_placement

    参数类型:布尔型
    功能:
    当它为True时,日志中将会记录每个节点被安排在了哪个设备上以方便调试。而在生产环境中奖这个参数设置为Flase可以减少日志量。

    例子

    1
    2
    3
    config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
    sess1 = tf.InteractiveSession(config=config)
    sess2 = tf.Session(config=config)
本文作者 : HeoLis
原文链接 : http://ishero.net/Tensorflow之会话.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

学习、记录、分享、获得

微信扫一扫, 向我投食

微信扫一扫, 向我投食