上QQ阅读APP看书,第一时间看更新
3.4 TensorFlow计算图
在执行TensorFlow程序时,我们需要构建一个计算图,然后按照计算图启动一个会话,在会话中完成变量赋值、计算等操作并得到最终结果。换句话说,TensorFlow的计算图可以划分为两部分:
- 构造部分,包含计算流图,用于构建模型。
- 执行部分,通过会话(Session)执行图中的计算,用于提供数据并获得结果。
对于计算图的构造部分而言,我们又可以分为两部分:
- 创建源节点。
- 源节点的输出传递给其他节点做运算操作。
这里,更吸引我们的是,TensorFlow会在C ++引擎上执行每一项运算操作,这意味着在Python中也不会执行任何乘法或加法,Python只是一个包装器。从根本上讲,TensorFlow C ++引擎包含以下两方面:
- 卷积、最大池化、Sigmoid等操作的高效实现。
- 转发模式操作的导数。
计算图基本上类似于数据流图。图3-2显示了一个简单计算的计算图,用于计算简单的等式,如z = d×c =(a + b)×c。
图3-2 一个简单的执行图
在图3-2中,圆圈表示节点处的操作,矩形表示整个数据计算图。在TensorFlow的实施中,TensorFlow计算图包含以下内容:
- 一组tf.Operation对象:用于表示要执行的计算单元。
- tf.Tensor对象:用于表示控制操作之间数据流的数据单元。
使用TensorFlow还可以执行延迟操作。一旦在计算图的构建阶段编写了高度组合的表达式,我们仍然可以在会话的运行阶段去对它们求值。从技术上讲,TensorFlow会给出措施并以有效的方式按时执行。例如,使用GPU并行执行代码的独立部分,如图3-3所示。
图3-3 TensorFlow图中的边和节点将在CPU或GPU等设备上的会话下执行