tf API 研读6:Running Graphs

会话管理 (Session management)

操作

描述

class tf.Session

运行TF操作的类, 一个Session对象将操作节点op封装在一定的环境内运行, 同时tensor对象将被计算求值

tf.Session.__init__(target=”, graph=None, config=None)

创建一个新的会话

tf.Session.run(fetches, feed_dict=None,  options=None, run_metadata=None)

运行fetches中的操作节点并求其值

tf.Session.close()

关闭会话

tf.Session.graph

返回加载值该会话的图(graph)

tf.Session.as_default()

设置该对象为默认会话,并返回一个上下文管理器

tf.Session.reset(target, containers=None, config=None)

重设target的资源容器,并关闭所有连接的会话 在0.10版本该功能仅应用在分布会话中 target:为执行引擎所连接的目标,其包含有资源容器, 该资源容器分布在同一个集群的所有works上

class tf.InteractiveSession

使用在交互式上下文环境的tf会话,比如shell,ipython

tf.InteractiveSession.close()

关闭一个InteractiveSession

tf.get_default_session()

返回当前线程的默认会话

tf.Session

#一个简单的tf.Session例子
# 建立一个graph.
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

# 将graph载入到一个会话session中
sess = tf.Session()

# 计算tensor `c`.
print(sess.run(c))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
#一个会话可能会占用一些资源,比如变量、队列和读取器(reader)。释放这些不再使用的资源非常重要。
#使用close()方法关闭会话,或者使用上下文管理器,释放资源。
# 使用`close()`方法.
sess = tf.Session()
sess.run(...)
sess.close()

# 使用上下文管理器
with tf.Session() as sess:
  sess.run(...)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

tf.Session()的变量设置, ConfigProto protocol buffer为会话提供了不同的配置选项。比如,创建一个会话,对设备布局使用软约束条件,以及对分布

# Launch the graph in a session that allows soft device placement and
# logs the placement decisions.
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                        log_device_placement=True))
  • 1
  • 2
  • 3
  • 4
  • 5

tf.Session.run

 a = tf.constant([10, 20])
   b = tf.constant([1.0, 2.0])
   # 'fetches' 可以为单个数
   v = session.run(a)
   # v is the numpy array [10, 20]
   # 'fetches' 可以为一个list.
   v = session.run([a, b])
   # v a Python list with 2 numpy arrays: the numpy array [10, 20] and the
   # 1-D array [1.0, 2.0]
   # 'fetches' 可以是 lists, tuples, namedtuple, dicts中的任意:
   MyData = collections.namedtuple('MyData', ['a', 'b'])
   v = session.run({'k1': MyData(a, b), 'k2': [b, a]})
   # v 为一个dict,并有
   # v['k1'] is a MyData namedtuple with 'a' the numpy array [10, 20] and
   # 'b' the numpy array [1.0, 2.0]
   # v['k2'] is a list with the numpy array [1.0, 2.0] and the numpy array
   # [10, 20].
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

tf.Session.as_default() 使用关键字with指定会话, 可以在会话中执行Operation.run()Tensor.eval(),以得到运行的tensor结果

c = tf.constant(..)
sess = tf.Session()

with sess.as_default():
  assert tf.get_default_session() is sess
  print(c.eval())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用函数tf.get_default_session()来得到当前默认的会话  需要注意的是,退出该as_default上下文管理器时,并没有关闭该会话(session ),必须明确的关闭会话

c = tf.constant(...)
sess = tf.Session()
with sess.as_default():
  print(c.eval())
# ...
with sess.as_default():
  print(c.eval())
#关闭会话
sess.close()
#使用 with tf.Session()方式可以创建并自动关闭会话
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

tf.InteractiveSession

sess = tf.InteractiveSession()
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
# 我们直接使用'c.eval()' 而没有通过'sess'
print(c.eval())
sess.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

以上的例子,在非交互会话的版本中为,

a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
with tf.Session():
  # We can also use 'c.eval()' here.
  print(c.eval())

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构说

Socket基本-TCP粘包问题

Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架 提供完整的解决方案 优点很多也就不说了, 但是有个缺点必须要求客户端调用采用thr...

67116
来自专栏码洞

Raft客户端实现要点

客户端消息处理最困难的一点在于消息可能会重复。比如客户端向Leader发送了一条指令,Leader收到了这条指令并执行了,但是连接在响应返回之前断开了。客户端没...

1343
来自专栏linux驱动个人学习

Linux内存描述之高端内存--Linux内存管理(五)

过去,CPU的地址总线只有32位, 32的地址总线无论是从逻辑上还是从物理上都只能描述4G的地址空间(232=4Gbit),在物理上理论上最多拥有4G内存(除了...

3281
来自专栏图形学与OpenGL

实验3 文件操作

    (3)     根据这个随机数,从所读取的记录中找到对应的记录,并输出显示;

1242
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版第二章coredump捕获的环境配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

802
来自专栏H2Cloud

linux epoll 开发指南-【ffrpc源码解析】

摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了。Epoll主要在服务器编程中使用,本文主要探讨服务器程...

4065
来自专栏乐享123

Vim 命令行操作小技巧

1924
来自专栏小狼的世界

[每天五分钟,备战架构师-3]操作系统基本原理之存储管理

存储器是计算机系统中最重要的资源之一,任何程序和数据及各种控制用的数据结构都必须占有一定的存储空间,因此,存储管理直接影响系统性能。

962
来自专栏移动端周边技术扩展

python pytesseract

1745
来自专栏Django中文社区

统计文章阅读量

如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要记录的那么精确。因此我们使用一种简单但有效的方式来记录博客文章的阅读量:文章...

4075

扫码关注云+社区

领取腾讯云代金券