深度学习模型debug目前来看,还是一个难点问题。pytorch能够有这样的发展势头,容易debug应该是一个突出优点。本篇文章记录一下笔者使用tensorflow时两次debug的经历,希望能给大家带来一点启发。

预测为Nan

训练好的一个文本分类模型,本地测试一切正常,部署到tfserving后,预测一直为Nan。

这个模型是另一个小伙伴训练的,我负责工程部署。当时疫情,大家都窝在家里。

当时我的第一反应是,是不是tfserving有问题?可是查看log,打印出来的值也都正常,就是最后返回的时候没有log,传到后端那里就是Nan了。笔者当时刚接触tfserving,从log查找问题这条重要的线索就中断了。

没办法,面向搜索引擎debug吧,查了一圈,也没发现任何有效的信息。

这下真有点狗咬刺猬不知道从哪下嘴了。

没办法,使出最笨的debug办法,我从输出开始,逆序依次将每层输出作为模型输出,在tfserving上部署,查看是否为Nan,这项工作就比较耗时,我让小伙伴在家里,修改一次模型,就训练两个step,保存的checkpoint发给我,我部署在tfserving上,我就要看看,到底是哪一层造成的Nan。

经过一个下午的修改、训练、部署、测试,终于终于发现了问题的原因所在:

模型中使用了dynamic_rnn,tfserving并不支持这个算子!

坑爹啊!

loss为Nan

复现某个语义相似度论文。非常奇怪,有时loss会变成Nan,有时又没问题,可以成功复现论文的结果。

于是,先开始在网上查了一堆loss为Nan的资料,softmax时发生了除0,或者计算loss时数据溢出,这时比较常见的,我在这两个地方也做了加固,确保不会除0,当时也把代码走读了一遍,感觉到可能除0的地方,都加了episilon,事实证明,我还是有点大意了,暂且按下不表。

然后就是网上说的各种各样的解决方案,试,一个又一个的试,试到海枯石烂!

结果就是,木有用!

这时候,时间已经过去2天。我强迫自己冷静下来,想到了自己debug以来总结的最厉害的一条经验:

看似最诡异的bug,很可能来自最naive的错误!

那么,总结我查到的所有资料,除0是最常见的操作,那么,会不会某个地方还是可能会除0,只是我没发现?

于是,我又一行一行代码查看,突然,发现有个地方很诡异:两个矩阵相除,element_wise的矩阵相除,也就是说,只要底下矩阵中任意一个元素为0,就会发生除0错误!

我迅速在这个地方做了加固,代码终于可以顺畅正常的运行了!

总结

遇到困难的bug,一定不要放弃,在解决bug的过程中,往往能学到很多之前不熟悉的知识!

E N D

各位伙伴们好,詹帅本帅假期搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读

牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

两次深度debug经历,希望大家不要踩坑相关推荐

  1. TVM:深度学习框架编译器的安装踩坑集

    目录 一.引言 二.流程 三.踩坑 四.备注 一.引言 4月底的时候,花了一天时间安装TVM这个东西.那时,上来就弄TVM 0.8的版本,但因为具体安装的流程不是很懂,所以出现了一些莫名其妙的问题.后 ...

  2. mysql两条记录合成一条数据_踩坑记录之csv数据导入MySQL

    可能采坑的操作 将excel表格转换成csv 逗号分隔,然后notepad检查文件是否是utf8编码,保存. 打开 phpMyAdmin , 选择要导入的表格,然后点击导入: 导入设置 点击执行之后, ...

  3. 思维方式-《思维的发现》书中的精髓:两个天才心理学家经历的奇妙经济学之旅。

    <思维的发现>书中的精髓:两个天才心理学家经历的奇妙经济学之旅. 今天要谈的两位心理学家,他们因为研究人类思维的决策过程,其中一位拿到了诺贝尔经济学奖,因为诺贝尔认为,做决策也是一种经济行 ...

  4. Impala-shell卡顿分析——记一次曲折的Debug经历

    Impala-shell卡顿分析--记一次曲折的Debug经历 问题发现 最近准备在Impala中增加对UTF-8的支持,以修正跟Hive.Spark等基于Java的系统在UTF-8字符串上的不兼容表 ...

  5. 2016年福建两化深度融合与新型CIO创新发展 论坛圆满落幕

    12月18日到19日,以"两化融合深度行"为主题的"2016年福建两化深度融合与新型CIO创新发展论坛"在盛辉物流集团有限公司三楼多功能厅正式举行.本次论坛在福 ...

  6. 2016年福建两化深度融合与新型CIO创新发展论坛 信息化催生福建“五新”

    12月18日到19日,以"两化融合深度行"为主题的"2016年福建两化深度融合与新型CIO创新发展论坛"在盛辉物流集团有限公司举行.本次论坛在福建省经济和信息化 ...

  7. 我的两次UFO目击经历

    以前很喜欢看科幻方面的书或者是电影,像关于外星人的<蓝皮书计划>等.喜欢看是以为那只是科幻,不是真的,直到我的两次UFO目击经历,从此再没敢看过科幻方面的东西. 〈一〉  大一的时候吧,农 ...

  8. 【NLP-NER】命名实体识别中最常用的两种深度学习模型

    命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务.NER是信息提取.问答系统.句法分析.机器翻译等众多NLP任务的重要基础工具. 上一期我们介绍了N ...

  9. 文档下载:《两万字深度介绍分布式系统原理》.pdf

    墨天轮文档:<两万字深度介绍分布式系统原理!>:https://www.modb.pro/doc/2028(复制到浏览器中打开或者点击"阅读原文"进行下载) 由于篇幅有 ...

最新文章

  1. 和Office一起做减肥操
  2. part.write java_使用javax.servlet.http.Part类上传文件
  3. Ruby之Rspec的报错解决
  4. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转
  5. NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档
  6. python网络编程(苦肝一夜,近万字)
  7. c的关于数组初始化 和 memset用法
  8. Netty完成网络通信(二)
  9. kotlin学习之嵌套类和内部类(六)
  10. P4211 [LNOI2014]LCA(离线 + 在线 做法)
  11. Java EE 7的高峰–使用EclipseLink的多租户示例
  12. 盘点云原生的5大特征
  13. OpenCV:Mat数据类型/16to8bit/RECT/画线填充
  14. linux系统中agent服务器,Zabbix添加对Linux服务器的监控(Zabbix-Agent)
  15. Newsgroups数据集介绍
  16. Android的ADT的安装
  17. 【Shiro第一篇】 Shiro权限框架简介
  18. bios error 装系统acpi_重装系统遇到bios acpi错误。
  19. 冒泡法排序(从小到大)
  20. 一些学习的网站 (持续更新)

热门文章

  1. PHP SPL使用方法和他的威力
  2. PHP微信支付没有收到微信的回调怎么修改订单状态:主动查询
  3. python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
  4. c语言输出参数是out,关于C语言中的输出输入流
  5. js函数 every some map ()=a+b;
  6. 为什么非全站升级HTTPS不可?
  7. linux下截取安卓手机屏幕,截取屏幕截图
  8. linux常规检查命令,linux学习-常规命令使用5
  9. mysql9索引实战_mysql 索引实战 | 学步园
  10. ECharts的点击事件