TensorFlow 运行模型--会话(Session)

会话模式一:

需要明确调用会话生成函数和关闭函数

# 创建一个会话
sess = tf.Session()
# 使用创建好的会话进行运算
sess.run("要运算的对象")
# 关闭会话使本次运行使用的资源得以释放
sess.close()

会话模式二:

创建一个会话,并通过python上下文管理器管理会话

with tf.Session() as sess:
    sess.run(...)   # 括号里是要运行的对象
# 计算结束后会自动关闭会话(仅能在with内部使用)

通过会话获取张量的取值tf.Tensor.eval函数

sess = tf.Session()
with sess.as_default():
    print(result.eval())


"""
输出
[4. 6.]
"""

TensorFlow提供了一个在交互式环境下直接构建默认的会话函数(tf.InteractiveSession)

sess = tf.InteractiveSession()
print(result.eval())
# 也是需要关闭的
sess.close()    

通过tf.InteractiveSession()可以省去将产生的会话注册为默认会话的过程,可直接使用result.eval()获取张量值
以上会话都可以使用Config Proto Buffer来配置需要生成的会话

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

通过配置ConfigProto可以配置类似并行的线程数、GPU分配策略、运算超时计算等参数。这些参数中最常用的有两个:

第一个是allow_soft_placement:这是一个bool型参数,当设置为True时GPU上的运算可以放到CPU上进行

  1. 运算无法在GPU上执行
  2. 没有相应的GPU资源(找不到指定的GPU)
  3. 运算输入包括对CPU计算结果的引用

这个参数默认值为False、但是为了提高代码的可移植性,在GPU环境下一般设置为True,这样可以让计算可以在不同版本的GPU,不同数量的GPU设备上运行

第二个是log_device_placement:是一个bool型参数。当其为True时,日志中会记录每个节点会被安排到哪个设备上以便调试,在生产环境中通常设置False以减少日志量

猜你喜欢

转载自www.cnblogs.com/lyh-vip/p/10508931.html
今日推荐