学习笔记TF003:数据流图定义、执行、可视化

清醒疯子 发布于 2017年05月07日 | 更新于 2017年05月07日
tinyfool 等1人欣赏。

数据流图,有向图,定义计算结构。一组函数链接在一起。每个函数输出传递给级联链上其他函数。利用小数学函数构造数据复杂变换。

节点node,对数据所优质运算操作。边edge,向节点输入、输出的数据。指向节点的边为输入,从节点引出的边为输出。边是节点之间的连接,做信息传输。输入可能来自其他数据流图、文件读取、用户输入。

输入节点把单个输入传递给大量后继节点。不依赖其他节点信息的节点,互相独立。数据流图输入抽象,操控内部运算细节,客户只需了解输入信息种类。把整个节点序列视为一组输入输出的离散构件。级联运算组可视化更容易,无需关心部件内部具体细节。

造成循环依赖(circular dependency)的节点连接不被允许。节点输出是后继节点计算必须输入,节点是后继节点的依赖节点。输出不需要其他节点任何输入,互相独立。依赖关系具有传递性。依赖分为直接依赖和间接依赖。节点输出作为直接或间接依赖节点的输入,因都需要等待对方计算完成,形成循环依赖。设置节点初始值可以让数据流图工作起来,但也会陷入无限循环,程序无法终目,依赖节点无穷大无法追踪依赖信息,数据会导致溢出或使某些计算无意义。通过数据流图有限次复制,并排放置,原始输入传给所有副本,副本输出与输入串接,称为展开(unrolling)。

确保只对必要节点执行运算,维护节点的直接依赖节点列表。空栈开始,最终输出节点入栈,输出节点直接依赖节点全部入栈,继续追溯,直到所有依赖节点全部入栈,对栈中节点排序,保证上运行次序,追踪已经完成计算的节点,输出保存在内存,避免重复计算。

TensorFlow工作流,定义数据流图,运行数据流图。节点被称为Operation(Op)。各Op接收零个或多个输入Tensor对象,输出零个或多个Tensor对象。调用Python构造方法创建Op。

确保TensorFlow环境处于活动状态。只有一个终端拥有活动状态的TensorFlow环境。jupyter notebook启动jupyter。新建项目,敲入以下代码:

import tensorflow as tf #导入TensorFlow库,取别名tf
a = tf.constant(5, name="input_a")#定义节点a,创建常量Op,接收单个张量值5,输出给连接节点,以             input_a标识。
b = tf.constant(3, name="input_b")#定义节点b,创建常量Op,接收单个张量值3,输出给连接节点,以input_b标识。
c = tf.multiply(a,b, name="mul_c")#定义节点c,创建乘法Op,接收两个输入,输出乘积,以mul_c标识。
d = tf.add(a,b, name="add_d")#定义节点d,创建加法Op,接收两个输入,输出求和,以add_d标识。
e = tf.add(c,d, name="add_e")#定义节点e,创建加法Op,接收两个输入,输出求和,以add_e标识。
sess = tf.Session()#创建并启动TensorFlow Session对象。
output = sess.run(e)#Session对象执行节点e,并保存输出结果
writer = tf.summary.FileWriter('./my_graph', sess.graph)#创建并启动summary.FileWriter对象,接收两个参数,一是数据流图磁盘存放路径;二是Session对象graph属性。
writer.close()#关闭summary.FileWriter对象
sess.close()#关闭Session对象

.constant创建常量Op,接收单个张量值,输出给连接节点,自动将标量值转换为Tensor对象,name参数标识节点。.multiply创建乘法Op,接收两个输入,输出乘积。.add创建加法Op,接收两个输入,输出求和。.sub创建减法Op。.div创建除法Op。.mod创建取模Op。无需定义边,TensofFlow自动绘制连接。TensorFlow Session负责运行时数据流图监督,运行数据流图。.Session()创建并启动TensorFlow Session对象。.run方法执行目标节点,运行必要运算,输出结果。.summary.FileWriter()创建并启动summary.FileWriter对象,接收两个参数,一是字符串输出目录,数据流图磁盘存放路径;二是Session对象graph属性,引用追踪数据流图。summary.FileWriter对象初始化后立即写入数据。

退出jupyter,tensorboard --logdir="my_graph"启动TensorBoard服务。在浏览器输入http://0.0.0.0:6006访问TensorBoard服务器。点击Graph标签,即可看到可视化的数据流图。

参考资料: 《面向机器智能的TensorFlow实践》

欢迎加我微信交流:qingxingfengzi

我的微信公众号:qingxingfengzigz

我老婆张幸清的微信公众号:qingqingfeifangz

暂无回复
登录 或者 注册
相关帖子