TensorFlow官⽅API中⽂版(⼀)
TensorFlow 官⽅API 中⽂版(⼀)
7/18/2016 7:49:42 PM
API⽂档
TensorFlow 拥有多种语⾔的API⽤于构建和执⾏TensorFlow图,Python API 是⽬前最完整和最容易使⽤的,但是C++ API可能在执⾏图⽅⾯提供⼀些性能优势,同时⽀持在⼩型设备上的部署(例如Android)。随着时间的推移,我们希望TensorFlow社区能够开发出像Go,Java,JavaScript,Lua,R(或其他)这样的前端语⾔。借助于SWIG,⽤你最喜欢的语⾔开发TensorFlow界⾯将变得⾮常容易。
Part I Building Graphs 图的构建
1.1 核⼼图的数据结构
1.1.1 class tf.Graph
这是⼀个TensorFlow计算(computation),代表⼀个数据流图(dataflow graph).
⼀张图包含⼀系列的Opration对象,这些对象代表着计算单元,⽽Tensor对象代表着数据单元,这些数据单元在各个Opertation间流动。
⼀张 默认图(default Graph)已经注册,可以通过调⽤ tf.get_default_graph()来获取它。为了向默认图添加⼀个操作,可以简单地调⽤定义了⼀个新的 Opertation 的函数:
c = tf.constant(4.0)
aph _default_graph()
另外⼀个典型的⽤法包括 Graph.as_default() 这个上下⽂管理器(context manager)在上下⽂环境中覆盖了当前的默认图。
g = tf.Graph()
with g.as_default():
# Define operations and tensors in `g`.
c = tf.constant(30.0)
aph is g
重要提⽰:这个类构建图是⾮线程安全的。所有的操作应该从单个线程中创建,否则必须提供外部同步。除⾮明确指明,所有⽅法都是⾮线程安全的。
创建⼀个新的空的图。
tf.Graph.as_default()
返回⼀个使得当前图成为默认图的上下⽂管理器
这个⽅法应该在你想要在相同的过程中创建多图时被使⽤。为了⽅便,⼀个全局默认图已经被提供,如果你没有明确创建⼀个新的图,所有的操作将会被添加进这张图。当你使⽤这个⽅法时,请使⽤ with 关键字明确在接下来的代码块范围内创建的操作应该加进这张图。
默认图是当前线程的⼀个属性,如果你创建了⼀个新的线程,并且希望在这个线程⾥使⽤默认图,你必须在这个线程的函数⾥明确添加 with g.as_default():
下⾯的代码⽰例(相对于上述解释)是等价的:
# 1. Using Graph.as_default():
g = tf.Graph()
with g.as_default():
c = tf.constant(5.0)
aph is g
# 2. Constructing and making default:
with tf.Graph().as_default() as g:
c = tf.constant(5.0)
aph is g
返回:
⼀个⽤于将当前图作为默认图的上下⽂管理器
tf.Graph.as_graph_def(from_version=None, add_shapes=False)
返回⼀个表⽰这个图的序列化的 GraphDef。
这个序列化的 GraphDef 可以被引⼊另⼀个图(使⽤ import_graph_def())或者使⽤ C++ Session API。
这个⽅法是线程安全的。
参数:
from_version: 可选的,如果被设定,将返回⼀个 GraphDef,它包含仅从这张图的版本属性有了给定值后加⼊这张图的节点(nodes)。
add_shapes: 如果是真值,给每个带有输出推断图形的结点添加⼀个_output_shapes列表属性。(adds an “_output_shapes” list attr to each node with the inferred shapes of each of its outputs.)
python官方文档中文版返回:
⼀个 GraphDef协议缓冲区(protocol buffer)
引起的错误:
ValueError: 如果 graph_def 太⼤
tf.Graph.finalize()
结束这个图,使它只读
在调⽤g.finalize()后,不能向g添加任何新的操作。当这个图在多线程间共享时,为了保证没有操作添加到这个图,可以调⽤这个⽅法,例如当使⽤⼀个 QueueRunner时
tf.Graph.finalized
如果这个图已经结束,它为真
l_dependencies(control_inputs)
返回⼀个明确控制依赖(control dependencies)的上下⽂管理器
使⽤ with 关键字明确所有在上下⽂内创建的操作应该在control_inputs上有控制依赖。例如:
l_dependencies([a, b, c]):
# `d` and `e` will only run after `a`, `b`, and `c` have executed.
d = ...
e = ...
control_dependencies()的多重调⽤可以嵌套,在这种情况下,基于所有活动的上下⽂中的 control_inputs 的联合,⼀个新的Operation 将拥有控制依赖。
l_dependencies([a, b]):
# Ops constructed here run after `a` and `b`.
l_dependencies([c, d]):
# Ops constructed here run after `a`, `b`, `c`, and `d`.
你可以通过None来清除控制依赖。
l_dependencies([a, b]):
# Ops constructed here run after `a` and `b`.
l_dependencies(None):
# Ops constructed here run normally, not waiting for either `a` or `b`.
l_dependencies([c, d]):
# Ops constructed here run after `c` and `d`, also not waiting
# for either `a` or `b`.
注:控制依赖应⽤于那些在上下⽂内建⽴的操作。很少在上下⽂中使⽤使⽤⼀个 op 或者 tensor 时不添加⼀个控制依赖。下⾯的例⼦解释了这⼀点:
# WRONG
def my_func(pred, tensor):
t = tf.matmul(tensor, tensor)
l_dependencies([pred]):
# The matmul op is created outside the context, so no control
# dependency will be added.
return t
# RIGHT
def my_func(pred, tensor):
l_dependencies([pred]):
# The matmul op is created in the context, so a control dependency
# will be added.
return tf.matmul(tensor, tensor)
参数:
control_inputs:⼀个 Operation 或者 Tensor 对象列表,它上下⽂内定义的操作被运⾏前被执⾏或者计算。也可以为None来清除控制依赖。
返回:
⼀个明确在上下⽂内所有操作的控制依赖的上下⽂管理器
引起的错误:
TypeError: 如果 control_inputs 不是⼀个 Operation 或者Tensor 对象的列表.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论