您的位置:首页 > 运维架构

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

2017-07-15 12:49 513 查看
1.4BuildingGraph

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

从图的角度来说,api分为Coregraphdatastructures,tensorftype,utilityfunctions,graphcollections,definingnewoperations这几个部分,下面分别进行介绍。

1.4.1

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

1.4.1.1tf.Graph

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

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

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

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

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

defmatmul_on_gpu(n):
 ifn.type=="MatMul":
   return"/gpu:0"
 else:
   return"/cpu:0"
withg.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.2tf.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.3tf.Tensor

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

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

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

常用的属性和函数如下:

tf.Tensor.dtype数据类型

tf.Tensor.nametensor名称

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获取计算的设备
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: