Tensorflow运行模型-----会话(session)

会话拥有并管理Tensorflow程序的所有资源,类似于操作系统中的进程控制块PCB。当所有计算完成之后需要关闭会话来帮助系统回收资源。否则会出现资源泄露的问题。

Tensorflow 中使用会话的模式一般有两种:

1:明确调用会话生成函数和关闭会话函数,

#创建一个会话

sess = tf.Session()

#使用这个创建好的会话结果,

sess.run(...)

#关闭会话使本次运行中使用的资源得以被释放

sess.close()



在执行这种模式的时候,明确需要调用Sesssion.close()函数来关闭会话并释放资源。当程序出现异常请况下,关闭函数可能就不能被执行,导致内存泄漏。Tensorflow 可以通过 Python 的上下文管理器来使用会话,给出一例:

#创建一个会话,用Python 中的上下文管理器来展示如何使用这种模式。

with tf.Session() as sess:

      #使用这创建好的回话来计算自己关心的结果。

       sess.run(....)

#不在需要再调用“Session.close()"函数来关闭会话,

#当上下文退出时,会话关闭,资源释放自动完成


Tensorflow 会自动生成一张默认的计算图,如果没有特殊指令,运算会自动加入其中。TensorFolw的会话也有类似的机制,但不会自动生成,需要手动指定。当默认的会话被指定之后可以通过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))


在交互式环境下,(比如Python脚本或者Jupyter的编辑器下),通过设置默认会话的方式获取张量的取值更加方便。给出一例:

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分配策略,运算超时等策略。最常用的:

1:allow_soft_placement = true时:Gpu可以放在cpu运算

            a: 无法在GPU运算

            b:无gpu资源

            c: 运算输入包括对cpu计算结果的引用

   参数默认为False ,但是为了可移植性更强,设为True。



2:log_device_placement = true时:会将记录每一个节点被安排在那个设备上以方便调试。

当他设置为Flase 可减少日志量。














猜你喜欢

转载自blog.csdn.net/qq_26577455/article/details/79925041
今日推荐