美文网首页
TF01-01:Tensorflow的执行方式

TF01-01:Tensorflow的执行方式

作者: 杨强AT南京 | 来源:发表于2018-10-15 19:03 被阅读31次

    本主题内容:体验Tensorflow的两种执行方式:

    1. TensorflowEager(立即)运行方式
    2. TensorflowGraphs(图)运行方式
    • Tensorflow提供两种数据处理方式
      • Eager
        TensorFlow 的Eager执行是传统的编程方式,直接对实际的数据立即执行运算,操作会返回具体的值;
      • Graphs
        TensorFlow 的Graphs执行是类似泛型模板编程方式,先对数据与计算过程进行模板描述,然后对具体的数据进行实例化执行,并获取结果的方式。
        Graphs的核心是构建图,图的主要元素是节点,Graphs中关键节点有两个:数据节点,运算节点。数据输入、处理、输出构成节点这几件的运算与数据流流[1],借用官方的一张示意图可以说明计算节点、数据节点与图 图表示的数据处理流
    • Tensorflow引入了一些符号来表示,截图说明如下:

      图的表述符号(有箭头的表示核心节点与节点关系)
    • 准备

        1. 安装Tensorflow
      pip  install tensorflow   -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
      

      这是使用的是速度比较快的镜像站点,可以使用默认的官方站点。

        1. 在python程序中import模块
      import tensorflow as tf  
      
        1. 例子的计算任务描述
          计算两个随机矩阵的内积(A_{4\times3}\cdot B_{3\times2})。

    一、体验Eager执行方式

    1、启动Eager执行模式

    • 启动eager执行环境,并检测是否是eager执行环境,如果不是eager执行环境,则终止程序退出。
       import sys
       import numpy as np
       import tensorflow as tf
       
       #1.开启eager执行方式
       tf.enable_eager_execution()
       
       #2.判定当前是否是eager执行方式
       if tf.executing_eagerly():
           print("Eager执行方式")
       else:
           print("Graphs执行方式")
           sys.exit(-1)
      

    2、Eager执行代码

    • 在计算中使用了两个numpy数组(矩阵),运算调用的是tensorflow的内积计算函数matmul
        #实现eager执行方式
        m1=np.random.uniform(0,1,(4,3))
        m2=np.random.uniform(0,1,(3,2))
        
        r=tf.matmul(m1,m2)
        
        print(r)
      
    • 程序输出如下:
      Eager执行模式下的输出结果
    • 如果把eager模式代码注释掉,则运行结果如下:
      Grahps执行方式下的输出结果

      在Graphs执行方式下,该怎样才能得到结果?下面使用来说明。

    二、体验Graphs执行方式

    • Graphs执行模式是别人设计好的,使用的时候需要按照设计来使用,用好Graphs就多看官方文档。
    • 使用Graphs执行方式最大的好处,只要描述清楚数据与运算流程,细节都由API来执行(比如在Graphs模式下,感知器的训练中的激活函数与损失误差函数的导数都会交给API自动完成)。Eager传统模式,则需要关注所有细节(在Eager模式下,感知器的训练中,激活函数与误差损失函数都需要程序员处理)。

    1.Graphs执行方式的模式

    • Graphs编程模式分成两步:
      • (1)描述数据、运算以及运算流程。
      • (2)构建运行会话环境,执行运算。

    2.Graphs代码实现

    • 描述数据,运算与运算流程
      这里没有复杂的运算流程(通过函数的输入,输出形成数据与运算流程),可能不足以提现Graphs执行方式的强大。

        #1.描述图:数据节点,运行节点
        #数据节点
        m1=np.random.uniform(0,1,(4,3))
        #数据节点
        m2=np.random.uniform(0,1,(3,2))
        #运算节点(r也算数据节点,通过matmul建立与m1、m2的数据与运算流 )
        r=tf.matmul(m1,m2)
      
    • 构建会话环境,执行运算

        #2.构建会话执行环境,并执行图。
        #构建会话对象
        session=tf.Session()
        #使用会话初始化变量环境
        init_op= tf.global_variables_initializer()  #构建一个初始化器
        session.run(init_op)                        #执行初始化器,并完成全局变量初始化
      
        #执行运算
        re=session.run(r)                           #返回结果
        print(re)
      
    • 完整代码

        #coding=utf-8
        import numpy as np
        import tensorflow as tf
      
        #1.描述图:数据节点,运行节点
        #数据节点
        m1=np.random.uniform(0,1,(4,3))
        #数据节点
        m2=np.random.uniform(0,1,(3,2))
        #运算节点(r也算数据节点,通过matmul建立与m1、m2的数据与运算流 )
        r=tf.matmul(m1,m2)
      
      
        #2.构建会话执行环境,并执行图。
        #构建会话对象
        session=tf.Session()
        #使用会话初始化变量环境
        init_op= tf.global_variables_initializer()  #构建一个初始化器
        session.run(init_op)                        #执行初始化器,并完成全局变量初始化
      
        #执行运算
        re=session.run(r)                           #返回结果
        print(re)
      
    • 执行结果

      Graphs执行方式下执行结果
    【资源】

    相关代码:

    1. t01_eager.py(体验eager执行方式)
    2. t01_graphs.py(体验graphs执行方式)
      下载:【 代码(github)

    1. [数据流]:是一种用于并行计算的常用编程模型。在数据流图中,节点表示计算单元(椭圆表示)与计算使用或产生的数据(矩形表示)。

    相关文章

      网友评论

          本文标题:TF01-01:Tensorflow的执行方式

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