【图】业界 | 谷歌发布tfdbg:让TensorFlow机器学习模型调试更简单 - 全国科技 - hao360
业界 | 谷歌发布tfdbg:让TensorFlow机器学习模型调试更简单
分享到微信朋友圈
选自Google Blog作者:蔡善清参与:李泽南、李亚洲随着 2 月 16 日谷歌开发者大会上
的发布,这一最流行的深度学习框架迈进了新的时代。昨天,谷歌宣布开源 TensorFlow Debugger,一个专用于调试TensorFlow 代码的新工具,希望以此让开发者们能够更轻松地构建机器学习项目。今天,我们很高兴发布 TensorFlow Debugger:一个让 TensorFlow 中机器学习模型变得容易的工具。地址:https://www.tensorflow.org/programmers_guide/debuggerTensorFlow 是谷歌开源的机器学习框架,它基于数据流图。构建一个典型的 TensorFlow 机器学习项目需要经历两个步骤:1. 使用 Python API 将机器学习模型设置为数据流图。2. 使用 Session.run() 对这个流图进行训练或应用。此前,如果在第二阶段出现了错误和 bug(如 TensorFlow runtime),我们很难进行 debug 工作。为了了解这种情况,请注意标准的 Python debugger,Session.run() 调用是一个单独的语句,不会暴露流图的内部结构(节点及其连接)和状态(输出数组或节点的张量)。一些低级的 debugger,如 gdb 无法理解 TensorFlow 流图的堆栈结构和变量值。所以,一个专用的运行环境调试器(debugger)是目前 TensorFlow 用户所急需的工具。tfdbg 的出现完美解决了运行环境调试器的需求。让我们看看它在一个简短的,用于运行简单线性方程梯度下降的代码片段中的表现。import numpy as np
import tensorflow as tf
import tensorflow.python.debug as tf_debug
xs = np.linspace(-0.5, 0.49, 100)
x = tf.placeholder(tf.float32, shape=[None], name="x")
y = tf.placeholder(tf.float32, shape=[None], name="y")
k = tf.Variable([0.0], name="k")
y_hat = tf.multiply(k, x, name="y_hat")
sse = tf.reduce_sum((y - y_hat) * (y - y_hat), name="sse")
train_op = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(sse)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess = tf_debug.LocalCLIDebugWrapperSession(sess)
for _ in range(10):
sess.run(train_op, feed_dict={x: xs, y: 42 * xs})正如代码高亮处所示,会话对象被包装为 debugging(LocalCLIDebugWrapperSession),因此调用 run() 方式将启动 tfdbg 的命令行界面(CLI)。使用鼠标点击或输入命令,你可以继续进行连续调用,检查流图节点和它们的属性,通过中间张量显示流图中执行所有相关节点的完整历史记录。通过使用 invoke_stepper 命令,你可以在「步进模式」中执行 Session.run() 调用。在该模式下,您可以跳转到所选节点,观察和修改它们的输出,然后继续检查下一步,这类似于程序语言的 debug(就像在 gdb 或 pdb 中)。在开发 TensorFlow 机器学习模型时,我们经常会遇到的问题是由于溢出、被零除、log0 等情况下出现的错误值(无穷大和 NaN)在大型 TensorFlow 流图中,寻找这样的错误是费时费力的。但现在通过 tfdbgCLI,你可以很快地找到罪魁祸首。以下视频展示了如何使用 tfdbg 解决神经网络代码中的无穷大/NaN 问题。相比于其他 debug 选择,比如 Print Ops,tfdbg 需要更少的代码行变化,还能提供对 graph 更全面的覆盖,以及更交互的 debug 体验。tfdbg 能够加速模型开发、debug 工作流程。它还提供了其他的特征,比如对服务器环境中废弃张量(dumped tensors)的离线 debug,还有融合 tf.contrib.learn 的特征。在你开始的时候,可以先浏览这一文档:https://www.tensorflow.org/programmers_guide/debugger。运行 tfdbg 需求的 TensorFlow 最低版本是 0.12.1。报告 bug 时,请在 Github 上 TensorFlow 的问题页面开个问题。以下论文详细展示了 tfdbg 的设计。论文:TensorFlow Debugger: Debugging Dataflow Graphs for Machine Learning摘要:可调试性在机器学习系统的开发中非常重要。包括 TensorFlow 和 Theano 在内的多个普遍使用的机器学习框架都是基于数据流图的(dataflow graph)。虽然数据流图能提供分布式训练这样的便利,但这种范式也使得模型问题的 debugg 相比于传统的程序式模型的 debugg 更难。在此论文中,我们提出了 TensorFlow Debugger(tfdbg) 设计,为 TensorFlow 中的机器学习模型专门设计的 debugger。tfdbg 提供的特征包括检验运行时数据流图和媒介图形元素(张量,trensors),以及模拟在图上的步骤。我们将会讨论该 debugger 在开发和测试使用案例中的应用。论文地址:/pubs/pub45789.html本文为机器之心编译,转载请联系本公众号获得授权。------------------------------------------------加入机器之心(全职记者/实习生):投稿或寻求报道:广告&商务合作:
相关文章HOT
Android版下载
iPhone版下载后使用快捷导航没有帐号?
查看: 79|回复: 1
keras,tensorlayer,TFLearn的比较,这个说法怎样?
新手上路, 积分 8, 距离下一级还需 42 积分
论坛徽章:0
转载自zhihu。 姚东
这三个库主要比的是API设计水平,不得不说原始的 Tensorflow API的确反人类,我承认它的完善、表达能力强,性能好,但是接口设计对人类非常不友好。
这就给了做高层抽象API封装的生存空间,Keras Tensorlayer TFLearn 是目前比较成熟的几个库。
做个比喻,Tensorflow就像当年的 Win32 API,功能强大但是难以使用,随便做点小事情就要写很多代码,我清楚记得我写个显示空白窗口的程序就要40来行。
Tensorlayer比较像 WTL,把一些繁琐的代码封装成更容易使用的接口,但是仍然保留了对底层API调用的能力,抽象的层次不高,仍然可以看到底层的 数据结构和网络结构。比如 可以看到 Session和Placeholder等。
TFLearn比较像 MFC,抽象的层次更高,创造了自己的一套子语法,代码可读性更好,屏蔽了底层难以理解的东西。
Keras比较像 Qt,很高的抽象层次,甚至跨越了多个框架,完全看不到底层的细节了,甚至某些情况需要触碰底层的对象和数据反而非常麻烦。
不同的抽象层次带来不同的学习难度,适应不同的需求。
基本建议:
如果只是想玩玩深度学习,想快速上手 -- Keras
如果工作中需要解决内部问题,想快速见效果 -- TFLearn 或者&&Tensorlayer
如果正式发布的产品和业务,自己设计网络模型,需要持续开发和维护 -- Tensorlayer
以上只是个人建议,具体情况因人而异。
注册会员, 积分 137, 距离下一级还需 63 积分
论坛徽章:1
讲的很清楚,期待下一次的讲解