专栏名称: 机器之心
专业的人工智能媒体和产业服务平台
目录
相关文章推荐
爱可可-爱生活  ·  【tex-fmt:一个用Rust编写的超高性 ... ·  12 小时前  
人工智能那点事  ·  “背刺”孕期女性,发涉黄短信给准爸爸?两家母 ... ·  3 天前  
AIGC开放社区  ·  超GPT-4o,1240亿参数!最强开源多模 ... ·  5 天前  
AIGC开放社区  ·  超GPT-4o,1240亿参数!最强开源多模 ... ·  5 天前  
黄建同学  ·  好东西!#开源##程序员# 20.3 K ... ·  5 天前  
智先生  ·  裁员了,很严重,大家做好准备吧! ·  6 天前  
智先生  ·  裁员了,很严重,大家做好准备吧! ·  6 天前  
51好读  ›  专栏  ›  机器之心

业界 | 谷歌发布tfdbg:让TensorFlow机器学习模型调试更简单

机器之心  · 公众号  · AI  · 2017-02-18 12:44

正文

选自Google Blog

作者:蔡善清

参与:李泽南、李亚洲


随着 2 月 16 日谷歌开发者大会上 TensorFlow1.0 的发布,这一最流行的深度学习框架迈进了新的时代。昨天,谷歌宣布开源 TensorFlow Debugger,一个专用于调试TensorFlow 代码的新工具,希望以此让开发者们能够更轻松地构建机器学习项目。


今天,我们很高兴发布 TensorFlow Debugger:一个让 TensorFlow 中机器学习模型变得容易的工具。


地址:https://www.tensorflow.org/programmers_guide/debugger


TensorFlow 是谷歌开源的机器学习框架,它基于数据流图。构建一个典型的 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 在开发和测试使用案例中的应用。


论文地址:https://research.google.com/pubs/pub45789.html



©本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):[email protected]

投稿或寻求报道:[email protected]

广告&商务合作:[email protected]