tensorflow API简单整理(四、Graph,Operation&Tensor)

标签: tensorflow 深度学习
271人阅读 评论(0) 收藏 举报
分类:

1.4 Building Graph

tensorflow 采用符号式编程,相对于一帮的命令式编程(c,java)来说,tensorflow 将程序编写分为两个部分,一部分是构建图,另一部分是运行这个图。在构建图中可以使用变量、常量、控制流等各种方法。除此之外,还有一些图本身的属性和适合的方法,本节主要介绍这部分的内容。

从图的角度来说,api分为Core graph data structures ,tensorf type ,utility functions ,graph collections ,defining new operations 这几个部分,下面分别进行介绍。

1.4.1

Core graph data structures 部分主要包括graph,Operation,Tensor三个部分,分别代表图以及图中的操作和tensor两种主要类型。

1.4.1.1 tf.Graph

tf.Graph 表示tensorflow 的一个类,新建一个Graph即表示一个图对象,其新建函数为tf.Graph.init(),不需要任何参数。主要有以下几种函数及变量。

  • tf.Graph.as_default() 将当前图设置为默认图。新建一个tensorflow程序时,会自动启动一个默认图,大部分时候不需要进一步新增。如果需要新增,一般采用 with tf.Graph() .as_default() as g: 这样一次性新建图并设置为默认。

  • tf.Graph.finalizer() 将图设置为不可变的状态,即不可增加和修改。 对应tf.Graph.finalized 属性,返回是否可变的bool值

  • tf.Graph.control_dependencies(control_inputs) 通过图来对tensor之间的依赖关系进行设置,control_inputs为需要在这个之前计算的变量或操作。一般采用 with g.control_dependencies(a,b): 在这个with语句包含的范围之内操作将在control_inputs计算完成之后再进行计算。

  • tf.Graph.device(device_name or function) 运算选择计算设备(CPU或GPU),一般有两种使用方式 with g.device("/gpu:0"):意味着with包含的所有计算语句都是采用第1个GPU进行计算。或者较为复杂的function方式,这里还是用代码说明吧.

     
    def matmul_on_gpu(n):
        if n.type == "MatMul":
            return "/gpu:0"
        else:
            return "/cpu:0"
    with g.device(matmul_on_gpu):  
  • 以上代码,如果是matmul计算,则采用GPU,其余的采用CPU

  • tf.Graph.name_scope(name) 这个函数返回一个graph内部的具有层级结构的scope,能对操作和变量进行空间限制。通过对相关博客以及参考文档的学习,name_scope主要面对于op进行操作,对变量的范围没有影响。变量应该使用variable_scope进行操作。

  • tf.Graph.add_to_colletion(name,value) 类似的 tf.Graph.get_collection(name,scope=Npne) 分别是将变量增加到某个集合中或者从某个集合中取变量。

  • tf.Graph.as_graph_element(obj, allow_tensor=True, allow_operation=True) 字面意思是返回一个图中与obj相关联的对象,为一个操作节点或者tensor数据,但是我没有搞清楚怎么用以及在什么地方用。

  • tf.Graph.get_operation_by_name(name)/tf.Graph.get_tensor_by_name(name)/tf.Graph.get_operations() 三个类似的函数,分别返回op,tensor以及tensor列表。

  • tf.Graph.get_default_device() 获取默认的计算设备

  • tf.Graph.gradient_override_map(op_type_map) 该graph 的梯度覆盖的上下文管理器,没有搞明白。

graph主要就是以上那些,还有几个函数,api文档上都说调用的不多,我就不写了。

1.4.1.2 tf.Operation

Operation是teansorflow 中操作节点的抽象化,有0个或多个输入和0个或多个输出,在运行后使用tf.get_default_session().run(op)进行运行,或者op.run(),这是前面的简化调用方式。主要属性与方法如下:

  • tf.Operation.name 获取名称

  • tf.Operation.type 获取属性

  • tf.Operation.inputs 获取输入值

  • tf.Operation.control_inputs 获取输入依赖值

  • tf.Operation.outputs 获取输出值

  • tf.Operation.device 获取操作设备

  • tf.Operation.graph 获取graph

  • tf.Operation.run(feed_dict=None, session=None) 如果op传入的是placeholder 对象,则需要使用feed_dict参数进行传入。

  • tf.Operation.get_attr(name) 获取op该属性的对应值。

老规矩,还有些函数或者属性,但是我觉得用的真的太少,就不管了。

1.4.1.3 tf.Tensor

tensor代表一个operation的结果。从tensorflow 的实际运行来说,tensor是operation一个输出的句柄,但是tensor所引用的并不持有具体的值,而是保持一个计算过程,在session调用的时候,可以使用这个计算过程来得到最终的结果。在python api中主要由两方面基本的内容:

(1)一个tensor可以被传递到另外一个operation,从而形成最终的数据流。这样,session中只需要对最后一个计算进行编码即可。

(2)在session调用最终的图之后,可以使用session.run()或者t.eval()对tensor的值进行计算。

常用的属性和函数如下:

  • tf.Tensor.dtype 数据类型

  • tf.Tensor.name tensor名称

  • tf.Tensor.value_index 在input中的index

  • tf.Tensor.graph 返回图名

  • tf.Tensor.op 返回操作名

  • tf.Tensor.consumers() 返回使用了这个tensorflow 的op列表

  • tf.Tensor.eval(feed_dict=None, session=None) 需要在session中使用,可以事先使用placeholder

  • tf.Tensor.get_shape() 获取形状

  • tf.Tensor.set_shape(shape) 设置形状

  • tf.Tensor.device 获取计算的设备

查看评论

TensorFlow 学习(四)—— computation graph

TensorFlow 的计算需要事先定义一个 computation graph(计算图),该图是一个抽象的结构,只有在评估(evaluate)时,才有数值解,这点和 numpy 不同。这张图由一组节...
  • lanchunhui
  • lanchunhui
  • 2017-03-15 12:10:11
  • 2055

Loading a TensorFlow graph with the C++ API

Check out the related post: Loading TensorFlow graphs via host languages (using the C API). The cur...
  • mydear_11000
  • mydear_11000
  • 2016-08-09 08:36:25
  • 2706

C++ API载入tensorflow graph

通过C++ API载入tensorflow graph在tensorflow repo中,和C++相关的tutorial远没有python的那么详尽。这篇文章主要介绍如何利用C++来载入一个预训练好的...
  • elaine_bao
  • elaine_bao
  • 2017-12-03 16:19:33
  • 831

【tensorflow】tensorboard中graph的显示

=============最近发现了一个问题================== 如果一直出现No dashboards are active for the current data set. ...
  • shwan_ma
  • shwan_ma
  • 2018-01-10 13:36:39
  • 463

TensorFlow基础:Graph与Variable

tensorflow的Graph对象 ------------------ 在tensorflow库在被加载的时候,它会自动创建一个Graph对象,并把它作为默认的数据流图. 所以在加载库后,就可以在...
  • u014281392
  • u014281392
  • 2017-06-28 19:53:30
  • 1601

Tensorflow中 Graph和Session的关系

session 和 graph 的关系
  • yanshuai_tek
  • yanshuai_tek
  • 2017-10-30 15:30:46
  • 444

简单记录Tensorflow中Graph和Session的关系

本篇博客转自以下博客: Tensorflow学习笔记2:About Session, Graph, Operation and Tensor以下是正文:1Tensorflow是一个基于图(Graph...
  • xg123321123
  • xg123321123
  • 2017-09-18 13:11:46
  • 1518

TensorFlow Python API解析:图的核心数据结构

1. Graph类的要点:(1) TensorFlow中的计算,表示为一个数据流图,简称“图”;(2) 一个Graph实例就是一个图,由一组Operation对象和Tensor对象构成:每个Opera...
  • deepknower
  • deepknower
  • 2016-12-23 00:16:18
  • 2812

如何理解TensorFlow中的Graph

如何理解TensorFlow中的GraphflyfishTensorFlow中的Graph是一个图图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中,G表示一个图...
  • flyfish1986
  • flyfish1986
  • 2017-05-24 18:53:32
  • 1044

三十六、深入理解tensorflow的session和graph

tensorflow作为一个基于图结构的深度学习框架,内部通过session实现图和计算内核的交互,那么这个图是什么样的结构,session的工作原理又是什么样的呢?我们通过几段代码来深入理解一下 ...
  • jiangjingxuan
  • jiangjingxuan
  • 2017-01-25 14:01:07
  • 7263
    个人资料
    持之以恒
    等级:
    访问量: 2742
    积分: 68
    排名: 160万+
    文章分类
    文章存档