常用API
了解TensorFlow的API有助于我们在应用时得心应手,本节我们将会介绍常用的API,在后面的示例中也将会经常用到。这里主要介绍基于Python的API,基于其他语言的API也大同小异,最重要的理解API的功能及背后的原理。
图、操作和张量
TensorFlow的计算表现为数据流图,所以tf.Graph类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据——张量对象(tf.Tensor)。与图相关的API均位于tf.Graph类中,详情请见下表:
tf.Operation类代表图中的一个节点,用于计算张量数据。该类型由节点构造器(如tf.matmul( )或者Graph.create_op( ))产生。例如,c=tf.matmul(a,b)创建一个Operation类,其类型为MatMul的操作类。与操作相关的API均位于tf.Operation类中,如下表所示:
tf.Tensor类是操作输出的符号句柄,它不包含操作输出的值,而是提供了一种在tf.Session中计算这些值的方法。这样就可以在操作之间构建一个数据流连接,使TensorFlow能够执行一个表示大量多步计算的图形。与张量相关的API均位于tf.Tensor类中,详情请见下表:
可视化
之前,我们讲解了可视化面板的功能,但如何编写可视化的程序吗?可视化时,需要在程序中给必要的节点添加摘要(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作用域只能用来创建新变量:
上述程序会抛出ValueError错误,因为这个变量v已经被定义过了,但tf.get_variable_scope( ).reuse默认为False,所以不能重用。