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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值