Tensorflow笔记---Tensorflow运行模型-----会话

本文介绍了Tensorflow中会话的管理,包括如何显式和隐式地打开与关闭会话,以及如何使用上下文管理器确保资源的正确释放。此外,还讨论了Tensorflow的默认会话创建以及如何通过ConfigProto配置会话参数,如允许软放置以适应不同GPU驱动的计算需求和设备放置的日志记录选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 首先会话拥有并管理Tensorflow程序运行时的所有资源。所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题。Tensorflow使用会话的模式主要有两种形式,第一种需要明确调用会话生成函数和关闭会话函数,这种模式代码如下:

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

上述代码需要Session.close函数来关闭会话并释放资源,当程序异常时可能关闭代码不会被执行导致资源泄露。为解决这个问题,可以通过Python的上下文管理使用会话,代码如下:

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

通过Python上下文管理器,只需要将计算放入with内部就可以。同时前面说过Tensorflow会自动生成一个计算图,但是Tensorflow不会自动生成默认的会话,需要手动指定。并通过tf.Tensor.eval函数计算张量的值,代码如下:

sess=tf.Session()
with sess.as_default():
    print(result.eval)
#以下代码也有相同的功能
sess=tf.Session()
#以下两个命令有相同的功能
print(sess.run(result))
print(result.eval(session=sess))

同时,交互环境下还有一种直接构建默认会话的函数,如下代码所示:

sess=tf.InteractiveSession
print(result.eval)
sess.close()

上述过程省去将产生的会话注册为默认会话的过程。但是无论哪种方法都要通过ConfigProto Protocol 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是一个布尔型的数,当它为True时,在以下任意一个条件成立是,GPU上的运算可以放到CUP上进行:

1运算无法在GPU上运行

2没有GPU资源

3运算输入包含对cpu计算结果的引用

当其为False时,为器默认值,为了代码移植性更高,一般设置为True因为不同GPU驱动版本对计算的支持有差别,当无法在GPU版本上运行时,自动移植到CPU上。

第二个参数是log_device_placement,也是一个布尔型变量,为True时,日志会记录每个节点被安排在哪个设备上方便调试,而生产环境中一般设置为False用来减少日志。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值