Tensorflow之会话

会话

创建

方法一

import tensorflow as tf

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

方法二

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

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

会话中张量的取值

方法一

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())

方法二

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

设置默认会话

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

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可以减少日志量。

例子

config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)

你可能感兴趣的:(Tensorflow之会话)