• tensorflow中有向图(计算图、Graph)、上下文环境(Session)和执行流程


    计算图(Graph)

    Tensorflow是基于图(Graph)的计算框架,图的节点由事先定义的运算(操作、Operation)构成,图的各个节点之间由张量(tensor)来链接,Tensorflow的计算过程就是张量(tensor)在节点之间从前到后的流动传输过程,如下图示例:



    有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。

    节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,其后的节点才能执行操作。推广到神经网络中,同一层之间的不同节点上的运算可以异步或并行的执行,但是前后层之间的执行还是要顺序执行,因为后一层的输入依赖于前一层的输出。

    上下文环境(Session)


    tf的计算必须要在一个Session的上下文中,Session提供了Operation执行和Tensor求值的环境。一个Session可能会拥有一些资源,例如Variable或者Queue。当我们不再需要该session的时候,需要调用sess.close()关闭会话(或使用Python上下文管理器自动关闭),将这些资源释放。


    如果在创建Session时没有指定Graph,则该Session会加载默认Graph。如果在一个进程中创建了多个Graph,则需要创建不同的Session来加载每个Graph,而每个Graph则可以加载在多个Session中进行计算,Session与Session之间是相互独立的。

    执行流程


    Tensorflow的执行可以分为三个步骤:
    •     创建Tensor
    •     定义Operations(Operations输入Tensor,然后输出另一个Tensor)
    •     执行计算(也就是运行一个可计算的图)

    一个最简单的Tensorflow计算流程示例如下,实现两个一维向量求和运算:

    # -*- coding: utf-8 -*-)
    import tensorflow as tf
    
    # 1. 创建两个张量(Tensor)
    input1 = tf.constant([1.0, 1.0, 1.0, 1.0])
    input2 = tf.constant([2.0, 2.0, 2.0, 2.0])
    
    # 2. 定义操作(Operations)
    output = tf.add(input1, input2)
    
    # 3.  执行计算
    with tf.Session() as sess:
        result = sess.run(output)
        #result = output.eval()
        print result
        #sess.close()   # 使用"with"语句,由python自动管理Session,不再需要显式调用close()

    tf中是定义操作(Operations)与执行操作分开的工作模式。上例中定义了一个名称为output的求和操作(也就是图(Graph)上的一个节点),定义操作(Operation)的时候计算不会立即执行,直到在上下文的Session环境中调用run()或eval(),触发了Tensorflow执行计算图,从而获取output计算结点的结果。

    更一般的情况下,tf中输入数据可能是不确定或随时变化的,针对这种情况,tf提供了feed注入机制,可以临时替代图(Graph)中操作(Operations)的输入张量(tensor),即把这些数据定义为占位变量,直到执行计算图之前才具体给定数据,再把这些数据以feed_dict的形式作为参数提供给sess.run()调用。feed机制按这种思路,上例改为:


    # -*- coding: utf-8 -*-)
    import tensorflow as tf
    
    # 1. 创建两个占位变量,只定义数值类型和形状(shape),具体数值在计算图执行前给定
    input1 = tf.placeholder(tf.float16,shape=[4])
    input2 = tf.placeholder(tf.float16,shape=[4])
    
    # 2. 定义操作(Operations)
    output = tf.add(input1, input2)
    
    # 3.  执行计算
    with tf.Session() as sess:
    
        input_1 = [1.0, 1.0, 1.0, 1.0]
        input_2 = [2.0, 2.0, 2.0, 2.0]
    
        result = sess.run(output,feed_dict = {input1:input_1, input2:input_2})
        print result

  • 相关阅读:
    javascript中的复制
    使用tensorflow-serving部署tensorflow模型
    Linux端口命令
    intellij idea强制更新索引
    The minimum required Cuda capability is 3.7.
    tensorflow没有代码提示的问题
    何为学术能力
    PageRank算法
    keras的训练引擎:train_array.py和train_generator.py
    如何阅读源代码
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411769.html
Copyright © 2020-2023  润新知