前言
tf.Session
允许执行所有图或者图的一部分,它在一个或者多个机器分配资源,并且保留中间结果和变量的实际值。
注意:
在tensorflow 2.0 版本Session已经去掉了!
session是对图定义的操作进行运行,图定义的变量如果使用session运行过一遍之后,再用session返回这个变量会报错。解决方法是,每次运行session,先对图进行初始化,再访问相应的变量。
1. 会话session
1.1常规操作:定义会话
#创建会话
session=tf.Session()
#运行定义好的运算
session.run()
#关闭会话
session.close()
>>> import tensorflow as tf
>
>>> a=tf.constant([1.0,2.0],name="a")
>>> sess=tf.Session()
>>> sess.run(a+b)
array([ 6., 8.], dtype=float32)
>>> sess.close()
>>> a+b
<tf.Tensor 'add_1:0' shape=(2,) dtype=float32>
1.2 with操作
使用python的上下文管理器,可以防止忘记关session
造成的资源泄漏问题。
用法为,把运算放在with下:
>>> with tf.Session() as sess:
... sess.run(a+b)
...
array([ 6., 8.], dtype=float32)
或者如下,
>>> result = a+b
>>> sess = tf.Session()
>>> with sess.as_default():
... print(result.eval())
...
[ 6. 8.]
2. 配置生成的会话ConfigProto()
2.1 tf.InteractiveSession()
交互环境直接构建默认会话函数tf.InteractiveSession()
。
使用它可以自动将生成的会话注册为默认会话。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
a=tf.constant([1,2],name='a')
b=tf.constant([3,4],name='b')
result=a+b
sess=tf.InteractiveSession()
print(result.eval())
sess.close()
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
#用于过滤一些warning
2.2 ConfigProto
下面配置GPU运算到CPU,代码需要使用TensorFlow-GPU版才能运行。
config = tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)
运行结果
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 720M, pci b
us id: 0000:01:00.0
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 720M, pci b
us id: 0000:01:00.0
参考: