Tensorflow入门教程五—会话

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

import tensorflow as tf
sess = tf.Session()
sess.run(...)
sess.close()

但是当程序异常退出时,可能无法运行sess.close()而导致资源泄露。为了解决异常退出问题,可以采用pyhon的上下文管理器来使用会话。

with tf.Session() as sess:#不需要再使用sess.close()
    sess.run(...)

在Tensorflow中会自动生成一个默认的计算图,如果没有特殊指定,运算会自动加入默认的计算图。Tensorflow的会话也有这个机制,但是Tensorflow不会自动生成磨人的会话,而是需要手动设定。当默认的会话被指定之后,可以通过tf.Tensor.eval函数来计算一个张量的取值。

import tensorflow as tf
a = tf.constant([[1,2,2],[1,2,3]])
b = tf.constant([[1,2,2],[1,2,3]])
result = a + b
sess= tf.Session()
with sess.as_default():
    print(result.eval())

tf.Tensor.eval()也可通过如下方式使用

import tensorflow as tf
a = tf.constant([[1,2,2],[1,2,3]])
b = tf.constant([[1,2,2],[1,2,3]])
result = a + b
with tf.Session() as sess:
    print(result.eval(session=sess))

在交互式环境中,通过设置默认会话的方式来获取张量的取值更加方便,所以Tensorflow提供了一种叫交互式环境下直接构建默认会话的函数。这个函数会自动将生成的会话注册为默认会话

import tensorflow as tf
a = tf.constant([[1,2,2],[1,2,3]])
b = tf.constant([[1,2,2],[1,2,3]])
result = a + b
sess = tf.InteractiveSession()
print(result.eval())
sess.close()

无论使用哪种方式生成会话,都可以使用tf.ConfigProto(allow_soft_placement=,log_device_placement=)函数来配置需要生成的会话。

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

tf.ConfigProto(allow_soft_placement=,log_device_placement=)可以配置类似并行的线程数,GPU分类策略,运算超时时间等参数,最长使用的是上述两个。allow_soft_placement为True时,在一下任意一个条件成立的时候,GPU的运算可以放到CPU上进行:

  • 运算无法再GPU上执行

  • 没有GPU资源

  • 运算输入包含对CPU结果的引用

log_device_placement为True时,日志中会记录每个节点被安排在了那个设备上以方便调试。而在生产环境中可以设为False减少日志量。

扫描二维码关注公众号,回复: 1048474 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_37895339/article/details/78937721