转载自:

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的更多相关文章

  1. 简单PHP会话(session)说明

    现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和ph ...

  2. http 会话(session)详解

    会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一.查看session id 可利用相关工具,比如firebug,httpwatc ...

  3. 网络基础 http 会话(session)详解

    http 会话(session)详解 by:授客 QQ:1033553122 会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一. ...

  4. Java通过遍历sessionId获取服务器所有会话session

    Servlet2.1之后不支持SessionContext里面getSession(String id)方法,也不存在遍历所有会话Session的方法.但是,我们可以通过HttpSessionList ...

  5. jfc在jsp页面画图,不将图片存在服务器端,只存入会话session(可用)

    jfc在jsp页面画图,不将图片存在服务器端,只存入会话session.其中主要用到jfc的一个servlet类. <%@ page contentType="text/html;ch ...

  6. Oracle数据库的连接模式connection Mode、连接connection与会话session

    数据库的连接模式Connection Mode: Dedicated Server Mode(专有模式) 当用户发出请求时,如远程的client端通过监听器连接数据库上,ORACLE的服务器端会启用一 ...

  7. MyBatis之会话Session原理

    MyBatis 之会话 Session 执行逻辑 1.SQL 会话工厂构建器类 SqlSessionFactoryBuilder 的 build 方法用于构建 SqlSessionFactory 类的 ...

  8. 使用SpringSession管理分布式系统的会话Session

    在我方供应链项目分布式部署的环境下,需要在统一网关服务中管理访问的Session,即无论访问请求路由到哪一个网关服务环境,使用的都是相同的HttpSession,这样就保证了在用户登录之后,能够使用统 ...

  9. tensorflow会话控制-【老鱼学tensorflow】

    在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...

随机推荐

  1. linux 下后台运行python脚本

    这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号 $ python /data/python/server.py >python.log &说明:  ...

  2. business expressions(一)

    一. 1.24/7 24/7 :twenty four hours a day, seven days a week I work 24/7.——meaing i work all the time. ...

  3. java安全框架shiro(一)

    第一个简单的案例 ,通过读取.ini文件的方式模拟登陆, 1.通过Factory工厂的getInstance()方法来获取SecurityManager的实例,实例化Factory需要一个ini文件的 ...

  4. RxJS速成 (上)

    What is RxJS? RxJS是ReactiveX编程理念的JavaScript版本.ReactiveX是一种针对异步数据流的编程.简单来说,它将一切数据,包括HTTP请求,DOM事件或者普通数 ...

  5. Docker(四):Docker 三剑客之 Docker Compose

    前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...

  6. R语言-文本挖掘

    ---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...

  7. STL --> string类字符串

    基本使用方法 一.输入 string s: cin >> s; getline(cin, s) ; //使用默认的'\n'作为终止符 getline(cin, s, '!') ; //以' ...

  8. Java基础学习笔记十五 集合、迭代器、泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...

  9. Leetcode 19——Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  10. JavaScript(第十三天)【内置对象】

    学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMAScript实现提供的.不依赖宿主环境的对象,这些对象在ECMAScript程序执行之前就 ...