TensorFlow运行模型——会话

TensorFlow中的会话(Session)拥有并管理TensorFlow程序运行时的所有资源,当所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露问题。

TensorFlow中使用会话的模式有以下两种:

  • 第一种模式,需要明确调用会话生成函数和关闭会话函数,这个模式的代码流程如下:

    #创建一个会话
    sess = tf.Session()
    
    #使用这个创建好的会话来得到关心的运算的结果
    sess.run(……)
    
    #关闭会话使得本次运行中使用到的资源可以被释放
    sess.close()
    

    使用这种模式时,在所有计算完成之后,需要明确调用close()函数来关闭会话并释放资源,但是当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源泄露

  • 第二种模式,通过Python的上下文管理器来使用会话,可以有效解决资源泄露这个问题,代码流程如下:

    #创建一个会话,并通过Python的上下文管理器来管理这个会话
    with tf.Session() as sess:
    
    	#使用这个创建好的会话来得到关心的运算的结果
    	sess.run(……)
    

    通过Python的上下文管理器机制,只要将所有的计算放在“with”内部,当上下文管理器退出时就会自动释放所有资源

TensorFlow会自动生成一个默认的计算图,如果没有特殊指定,计算会自动加到这个计算图当中,但TensorFlow不会自动生成默认的会话,而是需要手动指定,当默认的会话被指定后可以通过eval()函数来计算一个张量的取值,代码示例如下:

import tensorflow as tf

a = tf.constant([1.0,2.0], name="a")
b = tf.constant([2.0,3.0], name="b")
result = a + b

sess = tf.Session()

with sess.as_default():
    print(result.eval())    
print(sess.run(result))
print(result.eval(session=sess))

sess.close()

执行以上代码,会发现三个输出结果相同:

[3. 5.]
[3. 5.]
[3. 5.]

在交互环境下(如Python脚本或Jupyter编辑器),TensorFlow还提供了一种直接构造默认会话的函数——tf.InteractiveSession()函数,省去了将生成的会话注册为默认会话的过程,如下:

import tensorflow as tf

a = tf.constant([1.0,2.0], name="a")
b = tf.constant([2.0,3.0], name="b")
result = a + b

#自动将生成的会话注册为默认会话
sess = tf.InteractiveSession()
print(result.eval())

sess.close()

TensorFlow还支持在生成会话时通过tf.ConfigProto()函数配置相应参数,代码如下:

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

tf.ConfigProto()函数有以下两个参数:

  1. allow_soft_placement参数为True:代表某些计算无法被当前GPU支持时,可以自动调整到CPU上,而不是报错,可以提高代码的可移植性(默认为False)。

  2. log_device_placement参数为True:代表日志中会记录每个节点被安排在了哪个设备上以方便调试(参数被设置为False可以减少日志量)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值