关闭

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

标签: tensorflow深度学习
92人阅读 评论(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 获取计算的设备

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:784次
    • 积分:45
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档