TF01-01:Tensorflow的执行方式

本主题内容:体验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. 例子的计算任务描述
        计算两个随机矩阵的内积()。

一、体验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的执行方式)