zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HTML <input> 标签的 maxlength 属性
    HTTP 方法:GET 对比 POST
    怎么在html页面和js里判断是否是IE浏览器
    一行神奇的javascript代码
    c# 数据库批量插入数据SqlBulkCopy 示例
    c# 多线程调用窗体上的控件 示例
    sqlserver查找使用了某个字段的所有存储过程
    SQL Server 数据库性能优化
    SQL语句的执行过程
    Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
  • 原文地址:https://www.cnblogs.com/hejunlin1992/p/8270583.html
Copyright © 2011-2022 走看看