zoukankan      html  css  js  c++  java
  • TensorFlow进阶(五)---图与会话

    图与会话

    tf.Graph

    TensorFlow计算,表示为数据流图。一个图包含一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。默认Graph值始终注册,并可通过调用访问 tf.get_default_graph。

    a = tf.constant(1.0)
    assert c.graph is tf.get_default_graph()

    我们可以发现这两个图是一样的。那么如何创建一个图呢,通过tf.Graph()

    g1= tf.Graph()
    g2= tf.Graph()
    
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        print(g1,g2,tf.get_default_graph())

    图的其它属性和方法

    作为一个图的类,自然会有一些图的属性和方法。

    as_default()

    返回一个上下文管理器,使其成为Graph默认图形。

    如果要在同一过程中创建多个图形,则应使用此方法。为了方便起见,提供了一个全局默认图形,如果不明确地创建一个新的图形,所有操作都将添加到此图形中。使用该with关键字的方法来指定在块的范围内创建的操作应添加到此图形中。

    g = tf.Graph()
    with g.as_default():
      a = tf.constant(1.0)
      assert c.graph is g

    会话

    tf.Session

    运行TensorFlow操作图的类,一个包含ops执行和tensor被评估

    a = tf.constant(5.0)
    b = tf.constant(6.0)
    c = a * b
    
    sess = tf.Session()
    
    print(sess.run(c))

    在开启会话的时候指定图

    with tf.Session(graph=g) as sess:

    资源释放

    会话可能拥有很多资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase。在不再需要这些资源时,重要的是释放这些资源。要做到这一点,既可以调用tf.Session.close会话中的方法,也可以使用会话作为上下文管理器。以下两个例子是等效的:

    # 使用close手动关闭
    sess = tf.Session()
    sess.run(...)
    sess.close()
    
    # 使用上下文管理器
    with tf.Session() as sess:
      sess.run(...)

    run方法介绍

    run(fetches, feed_dict=None, options=None, run_metadata=None)

    运行ops和计算tensor

    • fetches 可以是单个图形元素,或任意嵌套列表,元组,namedtuple,dict或OrderedDict
    • feed_dict 允许调用者覆盖图中指定张量的值

    如果a,b是其它的类型,比如tensor,同样可以覆盖原先的值

    a = tf.placeholder(tf.float32, shape=[])
    b = tf.placeholder(tf.float32, shape=[])
    c = tf.constant([1,2,3])
    
    with tf.Session() as sess:
        a,b,c = sess.run([a,b,c],feed_dict={a: 1, b: 2,c:[4,5,6]})
        print(a,b,c)

    错误

    • RuntimeError:如果它Session处于无效状态(例如已关闭)。
    • TypeError:如果fetches或feed_dict键是不合适的类型。
    • ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。

    其它属性和方法

    graph

    返回本次会话中的图

    as_default()

    返回使此对象成为默认会话的上下文管理器。

    获取当前的默认会话,请使用 tf.get_default_session

    c = tf.constant(..)
    sess = tf.Session()
    
    with sess.as_default():
      assert tf.get_default_session() is sess
      print(c.eval())

    注意: 使用这个上下文管理器并不会在退出的时候关闭会话,还需要手动的去关闭

    c = tf.constant(...)
    sess = tf.Session()
    with sess.as_default():
      print(c.eval())
    # ...
    with sess.as_default():
      print(c.eval())
    
    sess.close()
  • 相关阅读:
    (1)ASCⅡ码与一般乘除与逻辑指令
    (2)串指令的传送
    【转】伟大的代码(97年的Mekka ’97 4K Intro比赛的一等奖作品)汇编机器码
    第四次游戏革命:全息游戏 from:http://www.cnblogs.com/alamiye010/archive/2012/08/15/2640881.html
    sqlce wp
    wp7 blogs
    单例的两种实现方式
    C# event from:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html#a4
    wp7——sqlite数据库操作 from:http://blog.csdn.net/wp_lijin/article/details/7370790
    Linq C#增删改查
  • 原文地址:https://www.cnblogs.com/fwl8888/p/9793225.html
Copyright © 2011-2022 走看看