zoukankan      html  css  js  c++  java
  • tensorflow的graph和session

    参考:https://blog.csdn.net/u013510838/article/details/84111031
      Session是TensorFlow前后端连接的桥梁。用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计算。它建立了一套上下文环境,封装了operation计算以及tensor求值的环境。
      session之间采用共享graph的方式来提高运行效率。一个session只能运行一个graph实例,但一个graph可以运行在多个session中。一般情况下,创建session时如果不指定Graph实例,则会使用系统默认Graph。常见情况下,我们都是使用一个graph,即默认graph。当session创建时,不会重新创建graph实例,而是默认graph引用计数加1。当session close时,引用计数减1。只有引用计数为0时,graph才会被回收。这种graph共享的方式,大大减少了graph创建和回收的资源消耗,优化了TensorFlow运行效率。

      tf通过运行时维护的session本地线程栈,来管理默认session。故不同的线程会有不同的默认session,默认session是线程作用域的。

      可以显示创建Graph,并调用as_default()使他替换默认Graph。在该上下文管理器中创建的op都会注册到这个graph中。退出上下文管理器后,则恢复原来的默认graph。一般情况下,我们不用显式创建Graph,使用系统创建的那个默认Graph即可。

    1 import tensorflow as tf
    2 
    3 print(tf.get_default_graph())  # 打印最初的默认图
    4 
    5 with tf.Graph().as_default() as g:
    6     print(tf.get_default_graph() is g) # 测试替换的默认图
    7     print(tf.get_default_graph())
    8 print(tf.get_default_graph())  # 恢复的默认图

    输出如下:

    <tensorflow.python.framework.ops.Graph object at 0x000002C9553DDC50>
    True
    <tensorflow.python.framework.ops.Graph object at 0x000002C9553CE240>
    <tensorflow.python.framework.ops.Graph object at 0x000002C9553DDC50>

    由此可见,在上下文管理器中,当前线程的默认图被替换了,而退出上下文管理后,则恢复为了原来的默认图。

    默认graph和默认session一样,也是线程作用域的。

  • 相关阅读:
    Java并发之ThreadPoolExecutor
    Java并发之同步工具类
    em和i , b和Strong 的区别
    OS应用架构谈(二):View层的组织和调用方案(中)
    iOS应用架构谈(二):View层的组织和调用方案(上)
    java(List或Array数组)求交集、并集、差集, 泛型工具类
    AES/DES 可逆性加密算法 -- java工具类
    用xtrabackup实现mysql的主从复制 阿里云rds到自己创建mysql
    java 生成二维码工具
    XDU 1022 (数论筛法+前缀和)
  • 原文地址:https://www.cnblogs.com/jianglinliu/p/10576339.html
Copyright © 2011-2022 走看看