TensorFlow计算模型——计算图

TensorFlow是一个通过计算图(Computational Graph)的形式来表述计算的编程系统,TensorFlow中的每一个计算都是计算图中的一个节点,而节点之间的边描述了计算之间的依赖关系,对于依赖关系,如果一个运算的输入依赖于另一个运算的输出,那么这两个运算有依赖关系。

TensorFlow程序一般分为两个阶段:

  • 第一个阶段,定义计算图中所有的计算,有如下实例代码:

    #使用“tf”来代替“tensorflow”作为模块名称,使这个程序更加简洁
    import tensorflow as tf
    
    #为了建模的方便,TensorFlow将常量转化成一个永远输出固定值的运算
    a = tf.constant([1.0,2.0], name="a")
    b = tf.constant([2.0,3.0], name="b")
    result = a + b
    
    #通过a.graph可以查看张量所属的计算图,通过tf.get_default_graph()可以获取当前默认的计算图
    print(a.graph is tf.get_default_graph())
    

    在TensorFlow程序中,会自动维护一个默认的计算图,在上述代码中,因为没有特意指定,所以a所在计算图等于当前默认的计算图,输出为True。

  • 第二个阶段,执行计算,该过程通常在会话(Session)中进行,关于会话的详细内容以及计算图执行计算的具体过程请参照:TensorFlow运行模型——会话 。

TensorFlow中的计算图主要有以下三个功能:

  1. 隔离张量和计算,TensorFlow支持通过tf.Graph()函数来生成新的计算图,不同计算图上的张量和计算都不会共享,关于张量的详细内容请参照:TensorFlow数据模型——张量。

  2. 管理张量和计算,计算图可以通过device()函数来指定运行计算的设备,为TensorFlow使用GPU提供了机制,如以下代码:

    g = tf.Graph()
    
    #指定计算的设备
    with g.device('/gpu:0'):
        result = a + b
    
  3. 有效地整理TensorFlow程序中的资源,这里的资源包括张量、变量或者运行TensorFlow程序所需要的队列资源,关于变量的详细内容请参照:TensorFlow的变量详解。

    在一个计算图中,可以通过集合(collection)来管理不同类别的资源,通过tf.add_to_collection()函数可以将资源加入一个或多个集合当中,通过tf.get_collection()函数可以获得一个集合里的所有资源,TensorFlow也自动管理了一些最常用的集合,如下:

    集合名称 集合内容 使用场景
    tf.GraphKeys.VARIABLES 所有变量 持久化TensorFlow模型
    tf.GraphKeys.TRAINABLE_VARIABLES 可学习的变量(一般指神经网络中的参数) 模型训练, 生成模型可视化内容
    tf.GraphKeys.SUMMARIES 日志生成相关的张量 TensorFlow计算可视化
    tf.GraphKeys.QUEUE_RUNNERS 处理输入的QueueRunner 输入处理
    tf.GraphKeys.MOVING_AVERAGE_VARIABLES 所有计算了滑动平均值的变量 计算变量的滑动平均值

你可能感兴趣的:(#,深度学习与TensorFlow)