TensorFlow的数据流图

TensorFlow的数据流图(data flow graph)符号化的表示了模型的计算是如何工作的.
简单的说,数据流图是完整的TensorFlow计算,图中的节点(node)表示操作(operation),而边(edge)表示各操作之间流通的数据.
通常,节点实现数学运算,同时也表示数据或变量的供给(feed),或输出结果.
边描述节点之间的输入/输出关系,这些数据边缘专门传输张量,节点被分配给计算设备,并且一旦其输入边缘上的所有张量都到位,这开始异步地并行执行.
所有的操作(operation)都拥有一个名字,可以表示一个抽象的计算.
(1)建立计算图
计算图通常并不需要直接构建Graph类对象,而是由用户在创建张量和操作的时候自动创建的.TensorFlow张量构造函数将向默认的计算图添加必要的元素.其他TensorFlow操作也同样如此.
例如,语句c=tf.constant(a.b)创建一个MatMul类型的操作,它接收张量a和b做为输入,并产生c作为输出.
有用的操作对象方法如下:
tf.Operation.type:返回操作的类型
tf.Operation.inputs 返回表示操作的输入张量对象列表
tf.Graph.get_operations()返回计算图中的操作列表
tf.Graph.version 返回计算图的版本信息
(2)数据供给
TensorFlow还提供了一种将张量直接注入到图内任何操作中的数据供给(feed)机制.
feed用张量临时替换操作的输出.将feed的数据作为参数传入run函数.feed只在调用它的方法内有效,最常见的用例是,通过使用tf.placeholder()创建特定的feed操作的方法.
(3)变量
在大多数计算中,会多次执行计算图.大多数张量的生存周期不会超过单次执行周期.然而,变量是一种特殊的操作,它返回一个持久的,可变的张量句柄,存活于多次计算图执行之中.对于TensorFlow的机器学习应用,模型的参数通常存储在变量中,并且在运行模型的训练阶段被更新.
(4)保存数据流图
数据流图是使用Google的协议缓存(protocol buffers)编写的,它是一种语言中立,平台中立,可扩展的结构化数据序列化机制.首先定义数据结构,然后使用特定的代码(各种编程语言都可以)读写它.