正文共1845个字,3张图,预计阅读时间5分钟。

之前有翻译整理过关于TensofFlow的Debugger的简单教程,具体内容见这里(https://www.jianshu.com/p/9fd237c7fda3)。这次用自己实际的例子,来简要的做个使用介绍。

首先是代码遇到了问题,训练过程中的loss不是为nan,就是为负数,让我觉得很奇怪,但是自己去检查代码又找不到问题出在哪里,这时候就想到了TensorFlow自带的Debugger。之前也有使用过,如果在没出问题的情况下,Debugger还是比较给力的。

01

用Debugger封装需要调试的Session

首先在代码的开头需要import对应的debugger模块(官方教程喜欢import debug as tf_debug,我这里就简写了,为了省事,看个人习惯吧)

from tensorflow.python import debug as tfdbg

然后在创建完Session的对象后,用调试器的Session进行封装

# 没有调试器之前的写法

with tf.Session(config=config) as sess:

# 加入调试器需要加入以下这行    sess = tfdbg.LocalCLIDebugWrapperSession(sess)

# 需要调试nan值,因此加上nan的过滤器    sess.add_tensor_filter("has_inf_or_nan", tfdbg.has_nan_or_inf)

02

调试过程

在用调试器封装好Session对象之后,就可以启动代码,运行后会看到如下界面:

图1 启动调试器

这是可以输入运行的指令(如果不清楚TensorFlow Debugger的指令,可以查看之前的教程https://www.jianshu.com/p/9fd237c7fda3)

r -f has_inf_or_nan

这样运行就会在有过滤器的情况下运行,并会捕获出现了过滤器指定数值的Tensor,我们这里指定的是出现了inf或者nan值的Tensor。运行后,结果如下图所示:

图2 捕获inf或nan值的Tensor

按照图中顺序,出现nan值的第一个Tensor是d_loss/Log:0,那么这个时候可以用下列指令直接查看这个Tensor的值。

pt d_loss/Log:0 -a

很显然,你会在打印的数值中找到nan或者inf值,但是调试的本意并不是查看这些nan值,而是需要知道来源,因此,我们需要知道这个Tensor数据的来源,可以使用下列指令:

ni d_loss/Log:0

上述指令运行后如下图:

图3 找到nan值的来源Tensor

从结果中可以看到,这个张量有一个输入的张量Discrim/add_2,这个时候用指令pt查看下Discrim/add_2的数值,发现在调用tf.log计算前(就是输入到d_loss/Log:0节点前)的数值为-1.11897061e-05,然后调用tf.log就出现了nan,因为log计算定义域为正数。

查看数值只会知道原因,要查找来源,需要使用指令定位这个来源的数据在源码中的位置:

ni -t Discrim/add_2

命令输出的结果是一个堆栈的内容,最终可以定位到代码"D_output3 = tf.matmul(D_output2, dWeights3) + dbiases3"这行,于是发现由于输出D_output3的时候,是直接输出的,没有加sigmoid激活函数,导致输出值为负,然后在输出之前添加sigmoid激活函数,将数值映射到(0,1)区间,代码即可正确运行了。

03

总结

使用TensorFlow的Debugger并不困难,大致总结起来有这么几个流程:

1.import要使用的TensorFlow的调试模块

from tensorflow.python import debug as tfdbg

2.使用调试模块的会话对象包装原有的Session对象

with tf.Session(config=config) as sess:

sess = tfdbg.LocalCLIDebugWrapperSession(sess)

3.加入异常值对应的过滤器

sess.add_tensor_filter("has_inf_or_nan", tfdbg.has_nan_or_inf)

4.运行代码,并在带过滤器的情况下运行

r -f has_inf_or_nan

5.跟踪异常值产生的节点,并找到异常值来源在源码中的位置(这个比较灵活,有些可能需要回溯几个节点,有些直接可查)

ni -t Discrim/add_2

原文链接:https://www.jianshu.com/p/f5c99a85cdf4

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

TensorFlow的Debugger调试实例相关推荐

  1. mysql调试事件_mysql日志管理分析调试实例_mysql

    以下的文章主要介绍的是mysql 操作日志查看的实际操作步骤以及对其实际操作步骤的具体描述,假如你在实际操作中遇到相似的情况,但是你却不知道对其如何正确的解决,那么以下的文章对你而言一定是良师益友. ...

  2. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序

    当在 IBM i 上使用 Java 时,您可以使用 Qshell Interpreter 或者 CL 命令提供的 Java tools,在 Qshell 环境和 IBM i 环境上进行与 Java 开 ...

  3. 汇编程序设计入门(安装+debug调试实例)

    汇编程序设计入门(安装+debug调试实例) 一.汇编环境安装 1.安装dosbox https://www.dosbox.com/download.php?main=1 2.下载和安装masm ht ...

  4. TensorFlow Lite 开发手册(5)——TensorFlow Lite模型使用实例(分类模型)

    TensorFlow Lite 开发手册(5)--TensorFlow Lite模型使用实例(分类模型) (一)新建CLion工程 (二)编写Cmakelist (三)编写main.cpp (四)下载 ...

  5. 手把手教你用Vscode Debugger调试代码

    http://shooterblog.site/2018/05/19/%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E7%94%A8Vscode%20De ...

  6. 浏览器调试技巧(debugger调试)

    之前调试前端代码,都是用console.log()打印信息,实在是个大捞比, 今天大佬告诉我可以用debugger调试,我的天,新大陆新姿势啊!(本人前端菜鸡) 示例代码 //查询方法function ...

  7. js中的debugger调试

    js中的debugger调试 debugger:停止JS的执行,相当于设置断点. 在JS代码编写的过程中,我们都会通过浏览器的调试模式(F12)来检查代码是否正确,大多数我们都是通过设置断点来进行调试 ...

  8. 【开发工具】【JTAG】JTAG调试实例【三】

    JTAG因为文章内容比较多,拆分成了四个部分,读者可以根据需求,点击查看其它的JTAG信息: JTAG基础 JTAG调试原理 JTAG调试实例 模拟系统崩溃,使用JTAG调试找到崩溃点 JTAG调试实 ...

  9. [翻译]如何使用Visual Studio的Debugger调试NDS自制软件

    [翻译]如何使用Visual Studio的Debugger调试NDS自制软件 发布:掌叔  来源:本站原创  时间:3天前  分类:NDS开发 本篇教程详细的讲解了如何使用Visual Studio ...

最新文章

  1. 归根到底,大家都是出来卖的!有的人月入十万,有的人月入三千!差距!
  2. Error in **: incorrect number of subscripts on matrix
  3. 世界杯决赛不好看,有点像假球,被裁判黑了?
  4. 喵哈哈村的魔法考试 Round #5 (Div.2) C
  5. 理解交通行业规律 用持续做“重”来重新定义共享出行
  6. linux阿帕奇日志文件,Linux下apache日志文件设置
  7. python 的下划线_
  8. Lambda 表达式详解~深入JVM实现原理
  9. win7系统临时文件夹的打开方法
  10. POJ 1002 487-3279
  11. 使用jquery对特殊字符进行转义,防止js注入
  12. Linux学习总结(78)—— 常见开源协议讲解
  13. 2021 年最佳 JavaScript 框架
  14. TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)
  15. 2022系统软件开发公司排行榜
  16. Android签名校验
  17. c盘存放文件夹的功能
  18. 手机也能实时查看开关门状态?Zigbee 智慧厕所门亮了
  19. DarkComet Analysis – Understanding the Trojan used in Syrian Uprising
  20. 微信小程序:图片秒加水印制作生成

热门文章

  1. python性能测试模块_技巧python模块性能测试-阿里云开发者社区
  2. linux内网服务器映射到公网地址吗,LINUX 内网设备将服务映射到公网地址
  3. Java 头像剪切及上传服务器JSP 笔记
  4. linux自动化测试脚本,linux iperf3 一键自动化测试脚本
  5. c# 结构体 4字节对齐_C语言程序员们常说的“内存对齐”,究竟有什么目的?
  6. 传感器工作原理_光电式速度传感器的工作原理
  7. android gps时间格式,android – GPS:NTP时间注入的工作原理
  8. oracle 11g r2 安装过程与卸载详细图解
  9. spring boot入门小案例
  10. NVisionXR_iOS教程十 —— 加载视频控件