常用API

了解TensorFlow的API有助于我们在应用时得心应手,本节我们将会介绍常用的API,在后面的示例中也将会经常用到。这里主要介绍基于Python的API,基于其他语言的API也大同小异,最重要的理解API的功能及背后的原理。

图、操作和张量

TensorFlow的计算表现为数据流图,所以tf.Graph类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据——张量对象(tf.Tensor)。与图相关的API均位于tf.Graph类中,详情请见下表:

Python table api 原理 python常用api_Python table api 原理

tf.Operation类代表图中的一个节点,用于计算张量数据。该类型由节点构造器(如tf.matmul( )或者Graph.create_op( ))产生。例如,c=tf.matmul(a,b)创建一个Operation类,其类型为MatMul的操作类。与操作相关的API均位于tf.Operation类中,如下表所示:

Python table api 原理 python常用api_数据_02

tf.Tensor类是操作输出的符号句柄,它不包含操作输出的值,而是提供了一种在tf.Session中计算这些值的方法。这样就可以在操作之间构建一个数据流连接,使TensorFlow能够执行一个表示大量多步计算的图形。与张量相关的API均位于tf.Tensor类中,详情请见下表:

Python table api 原理 python常用api_API_03

可视化

之前,我们讲解了可视化面板的功能,但如何编写可视化的程序吗?可视化时,需要在程序中给必要的节点添加摘要(summary),摘要会收集该节点的数据,并标记上第几步、时间戳等标识,写入文件事件中。tf.summary.FileWriter类用于在目录中创建事件文件,并且向文件中添加摘要和事件,用来在TensorBoard中展示。

变量作用域

在TensorFlow中有两个作用域(scope),一个是name_scope,另一个是variable_scope。它们究竟有什么区别呢?简而言之,variable_scope主要是给variable_name加前缀,也可以给op_name加前缀:name_scope是给op_name加前缀。下面就来介绍一下。

variable_scope示例

variable_scope变量作用域机制在TensorFlow中主要由两部分组成:

v = tf.get_variable(name, shape, dtype, initializer) # 通过所给的名字创建或是返回一个变量

tf.variable_scope() # 为变量指定命名空间

当tf.get_variable_scope( ).reuse == False时,variable_scope作用域只能用来创建新变量:

Python table api 原理 python常用api_API_04

上述程序会抛出ValueError错误,因为这个变量v已经被定义过了,但tf.get_variable_scope( ).reuse默认为False,所以不能重用。