两次深度debug经历,希望大家不要踩坑
深度学习模型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经历,希望大家不要踩坑相关推荐
- TVM:深度学习框架编译器的安装踩坑集
目录 一.引言 二.流程 三.踩坑 四.备注 一.引言 4月底的时候,花了一天时间安装TVM这个东西.那时,上来就弄TVM 0.8的版本,但因为具体安装的流程不是很懂,所以出现了一些莫名其妙的问题.后 ...
- mysql两条记录合成一条数据_踩坑记录之csv数据导入MySQL
可能采坑的操作 将excel表格转换成csv 逗号分隔,然后notepad检查文件是否是utf8编码,保存. 打开 phpMyAdmin , 选择要导入的表格,然后点击导入: 导入设置 点击执行之后, ...
- 思维方式-《思维的发现》书中的精髓:两个天才心理学家经历的奇妙经济学之旅。
<思维的发现>书中的精髓:两个天才心理学家经历的奇妙经济学之旅. 今天要谈的两位心理学家,他们因为研究人类思维的决策过程,其中一位拿到了诺贝尔经济学奖,因为诺贝尔认为,做决策也是一种经济行 ...
- Impala-shell卡顿分析——记一次曲折的Debug经历
Impala-shell卡顿分析--记一次曲折的Debug经历 问题发现 最近准备在Impala中增加对UTF-8的支持,以修正跟Hive.Spark等基于Java的系统在UTF-8字符串上的不兼容表 ...
- 2016年福建两化深度融合与新型CIO创新发展 论坛圆满落幕
12月18日到19日,以"两化融合深度行"为主题的"2016年福建两化深度融合与新型CIO创新发展论坛"在盛辉物流集团有限公司三楼多功能厅正式举行.本次论坛在福 ...
- 2016年福建两化深度融合与新型CIO创新发展论坛 信息化催生福建“五新”
12月18日到19日,以"两化融合深度行"为主题的"2016年福建两化深度融合与新型CIO创新发展论坛"在盛辉物流集团有限公司举行.本次论坛在福建省经济和信息化 ...
- 我的两次UFO目击经历
以前很喜欢看科幻方面的书或者是电影,像关于外星人的<蓝皮书计划>等.喜欢看是以为那只是科幻,不是真的,直到我的两次UFO目击经历,从此再没敢看过科幻方面的东西. 〈一〉 大一的时候吧,农 ...
- 【NLP-NER】命名实体识别中最常用的两种深度学习模型
命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务.NER是信息提取.问答系统.句法分析.机器翻译等众多NLP任务的重要基础工具. 上一期我们介绍了N ...
- 文档下载:《两万字深度介绍分布式系统原理》.pdf
墨天轮文档:<两万字深度介绍分布式系统原理!>:https://www.modb.pro/doc/2028(复制到浏览器中打开或者点击"阅读原文"进行下载) 由于篇幅有 ...
最新文章
- 和Office一起做减肥操
- part.write java_使用javax.servlet.http.Part类上传文件
- Ruby之Rspec的报错解决
- 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转
- NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档
- python网络编程(苦肝一夜,近万字)
- c的关于数组初始化 和 memset用法
- Netty完成网络通信(二)
- kotlin学习之嵌套类和内部类(六)
- P4211 [LNOI2014]LCA(离线 + 在线 做法)
- Java EE 7的高峰–使用EclipseLink的多租户示例
- 盘点云原生的5大特征
- OpenCV:Mat数据类型/16to8bit/RECT/画线填充
- linux系统中agent服务器,Zabbix添加对Linux服务器的监控(Zabbix-Agent)
- Newsgroups数据集介绍
- Android的ADT的安装
- 【Shiro第一篇】 Shiro权限框架简介
- bios error 装系统acpi_重装系统遇到bios acpi错误。
- 冒泡法排序(从小到大)
- 一些学习的网站 (持续更新)
热门文章
- PHP SPL使用方法和他的威力
- PHP微信支付没有收到微信的回调怎么修改订单状态:主动查询
- python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
- c语言输出参数是out,关于C语言中的输出输入流
- js函数 every some map ()=a+b;
- 为什么非全站升级HTTPS不可?
- linux下截取安卓手机屏幕,截取屏幕截图
- linux常规检查命令,linux学习-常规命令使用5
- mysql9索引实战_mysql 索引实战 | 学步园
- ECharts的点击事件