Tensorflow数据流图

作者: zer0like | 来源:发表于2019-01-07 20:21 被阅读0次

    0x01 数据流图


    数据流图:用节点和有向边描述数学运算的有向无环图
    节点:代表各类操作(operation),具体包括数学运算、数据填充、结果输出和变量读写等
    有向边:描述节点间的输入、输出关系,而张量(Tensor)则在边上流动

    基于梯度下降的机器学习问题,在TensorFlow的数据流图中通常可分为两个阶段:

    1. 前向图求值:用户编写,主要包括定义模型的目标和损失函数,输入输出的形状和类型
    2. 后向图计算梯度:TensorFlow的优化器生成,主要用来计算模型的梯度以及梯度的更新

    0x02 节点


    前向图中,节点称为操作(operation)主要包括三类:

    1. 数学函数或表达式:如加减乘除等
    2. 储存模型参数的变量(Variable):比如卷积中的卷积核和偏置
    3. 占位符(Placeholder):用来描述输入输出的形状,便于用户利用其抽象结构来定义模型,执行时需要填充对应的数据

    后向图中,节点也会分为三类:

    1. 梯度值:经过前向图计算出的模型参数的梯度
    2. 更新模型参数的操作:定义如何将梯度值更新到对应的模型参数
    3. 更新后的模型参数:优化器中的参数与前向图中的参数一一对应,但是参数进行了更新,用户下一轮训练

    0x03 有向边


    有向边定义操作之间的关系,主要包括两类:

    1. 传输数据,绝大的有向边都是此类,用来流动张量
    2. 定义控制依赖,泰国设定节点的前置依赖决定相关节点的执行顺序,又被称为控制边

    所有的节点都通过数据边和控制边相连,入度为0的节点,即没有前置依赖的节点可直接执行,其他节点必须等所有依赖节点执行完才可执行

    0x04 执行原理


    从宏观的角度可分为四个步骤:

    • 以节点的名称做关键字、入度作为值,构建散列表,并将此数据流图上的所有节点都放入散列表中
    • 为此数据流图创建一个可执行节点队列,将散列表中入度为0的节点加入到队列中,并从散列表中删除这些节点
    • 依次执行队列中的每一个节点,执行成功后将此节点输出指向的节点的入度减1,更新散列表中对应节点的入度值。
    • 重复上面两个步骤直到执行队列为空。

    注意:TensorFlow的编程模式(声明式编程)决定了其执行的顺序并不完全依赖于与代码中定义的顺序,而与节点之间的逻辑关系以及运行时库的实现机制相关。

    相关文章

      网友评论

        本文标题:Tensorflow数据流图

        本文链接:https://www.haomeiwen.com/subject/dwuprqtx.html