Tensorflow教程系列(3): 会话session

前言

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

参考:

  1. What is a TensorFlow Session?
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页