Tensorflow会话Session
转载自:
http://blog.csdn.net/Hanging_Gardens/article/details/72784392
https://www.cnblogs.com/hypnus-ly/p/8040951.html
会话Session持有并管理tensorflow程序运行时的所有资源。tensorflow构建的计算图Graph必须通过Session会话才能执行,如果只是在计算图中定义了图的节点但没有使用Session会话的话,就不能运行该节点。
调用会话的三种方式:
方式一:明确的调用会话的生成函数和关闭会话函数
# create a session
sess = tf.Session() # use this session to run a result
sess.run(...) # close this session, release memeory
sess.close()
调用这种方式时,要明确调用Session.close(),以释放资源。当程序异常退出时,关闭函数就不能被执行,从而导致资源泄露。
方式二:上下文管理机制自动释放所有资源
# 创建会话,并通过上下文机制管理器管理该会话
with tf.Session() as sess:
sess.run(...)
# 不需要再调用"Session.close()"
# 在退出with statement时,会话关闭和资源释放已自动完成
会话类似计算图机制,可以指定为默认
sess = tf.Session()
with sess.as_default():
# result为某个张量
print(result.eval()) # 以下代码可完成相同的功能
sess = tf.Session()
print(sess.run(result)) # 或者
print(result.eval(session=sess))
方式三:使用交互式环境
在交互式环境下,通过设置默认会话的方式来获取张量的取值更加方便,调用函数tf.InteractiveSession()省去将产生的会话注册为默认会话的过程。
# 在交互式环境下,使用设置默认会话的方法来获取张量的取值更加方便,tensorflow提供了一种在交互式环境下直接构建
# 默认会话的函数,tf.InteractiveSession。该函数会自动将生成的会话注册为默认会话。
sess= tf.InteractiveSession()
print(result.eval())
sess.close()
以上,最常用的还是方式二,但这三种方式都可以通过ConfigProto Protocol Buffer来配置需要生成的会话,如并行线程数、GPU分配策略、运算超时时间 等参数,最常用的两个是allow_soft_placement和log_device_placement。
ConfigProto配置方法:
config = tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)
allow_soft_placement:一个布尔类型的参数。当为True时,在以下条件下,可以将GPU上的运算方法CPU上。
1、运算无法在GPU上执行
2、没有GPU资源(比如本机只有一个GPU,但运算被指定在其他GPU上执行)
3、运算输入包含对CPU计算结果的应用
为了加强代码的可移植性,在有GPU的环境下,一般将该参数设置为True
log_device_placement:一个布尔类型的参数。当设置为True时,日志中将会记录每个节点被安排在了那个设备上方便调试。
另外,关于Tensorflow的GPU使用说明可以参考:http://www.cnblogs.com/hejunlin1992/articles/7800876.html
Tensorflow会话Session的更多相关文章
- 简单PHP会话(session)说明
现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和ph ...
- http 会话(session)详解
会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一.查看session id 可利用相关工具,比如firebug,httpwatc ...
- 网络基础 http 会话(session)详解
http 会话(session)详解 by:授客 QQ:1033553122 会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一. ...
- Java通过遍历sessionId获取服务器所有会话session
Servlet2.1之后不支持SessionContext里面getSession(String id)方法,也不存在遍历所有会话Session的方法.但是,我们可以通过HttpSessionList ...
- jfc在jsp页面画图,不将图片存在服务器端,只存入会话session(可用)
jfc在jsp页面画图,不将图片存在服务器端,只存入会话session.其中主要用到jfc的一个servlet类. <%@ page contentType="text/html;ch ...
- Oracle数据库的连接模式connection Mode、连接connection与会话session
数据库的连接模式Connection Mode: Dedicated Server Mode(专有模式) 当用户发出请求时,如远程的client端通过监听器连接数据库上,ORACLE的服务器端会启用一 ...
- MyBatis之会话Session原理
MyBatis 之会话 Session 执行逻辑 1.SQL 会话工厂构建器类 SqlSessionFactoryBuilder 的 build 方法用于构建 SqlSessionFactory 类的 ...
- 使用SpringSession管理分布式系统的会话Session
在我方供应链项目分布式部署的环境下,需要在统一网关服务中管理访问的Session,即无论访问请求路由到哪一个网关服务环境,使用的都是相同的HttpSession,这样就保证了在用户登录之后,能够使用统 ...
- tensorflow会话控制-【老鱼学tensorflow】
在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...
随机推荐
- 数据模型LP32 ILP32 LP64 LLP64 ILP64
各个C++实现所选择采用的基础类型的大小统称为"数据模型".有四种广泛采用的数据模型: 32 位系统: LP32 或 2/4/4(int 为 16-bit,long 和指针为 32 ...
- [JLOI2012] 树
Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...
- 彻底弄懂CommonJS和AMD/CMD!
JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...
- Know your weapons Ⅱ
本次内容主要讲述使用UWP相关技术可以实现的软件上的一些功能,这里以Netease-Cloud Music(下称Cloud Music)为例讲述,这款音乐软件我个人一直在用,毕竟人们生活离不开音乐,说 ...
- ngix_http_stub_status_module
1.ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的,所以在编译 Ngin ...
- Laravel 模型事件入门
Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...
- php和apache工作原理?
1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...
- 关于yaml语言
yaml语言广泛用于书写配置文件. 主要特点如下: 1.使用缩进表示层级关系,缩进使用空格键(非Tab键) 2.缩进的空格数目不要求,只要相同层级的元素左侧对其即可 3.#之后的内容为注释 4.yam ...
- [BZOJ 2064]分裂
2064: 分裂 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 572 Solved: 352[Submit][Status][Discuss] De ...
- js中非死循环引起的栈调用溢出问题
一般情况下,仅从代码上看只要不出现死循环,是不会出现堆栈调用溢出的.但是某些情况下列外,比如下面这段代码: var a = 99; function b (){ a --; if (a > 0) ...