TensorFlow调试技巧
TensorFlow从诞生以来就一直在深度学习框架中稳居老大的位置,虽然自从2018年12月PyTorch 1.0 stable版本正式发布以来,很快减小了差距,但是也难以超越。
TensorFlow的强项在于部署(包括TensorFlow Lite在移动端部署)和运行效率,另外对各种operation的支持特别齐全,基本上你能想到的算子都已经实现好了,直接调用就好。除此之外,Google Brain的各项前沿研究,以及现在DeepMind的很多研究,开源代码肯定都是基于TensorFlow,比如现在很火的AutoML技术等等,所以成为No.1也是自然而然。
但是又不得不吐槽其调试功能,真是太难用了。这也直接导致了TensorFlow的学习曲线异常之陡,和vim的类似,学起来很难很痛苦,但是学好之后,那是相当地爽。
那么,TensorFlow怎么调试呢?使用断点还是print?亦或是高大上的tfdbg?都不是。
由于TensorFlow静态图的设计(eager模式除外,这个后面单独讨论),设置断点根本无法获取实际tensor的值,具体取值都在后台以C++的方式执行。那print呢?也只能打印出tensor的shape信息。tfdbg,这个官方开发的专用工具该行了吧?不过我建议还是不要尝试了,不仅要一点一点敲命令,我在debug大型程序的时候,直接卡死。
对了,还有一种暴力方法,我最开始的时候在使用,就是把tensor拉出来sess.run一把,这样的确可以得到tensor运行的具体值,但是每次要手动改,很麻烦。
好了,神器要出来了:tf.Print. 在老版本的TensorFlow中可以这么用,非常方便:
x = tf.Print(x, [x, x,shape, x[0], …], message=“x debug info”, summarize=100)
其中,x是需要打印的tensor,注意第一个输入是x和输出相同,但其实也可以不同,做一些操作,但一般debug不需要,所以等式左边的输出也是x.
第二个输入在方括号内表示需要打印的东西,可以是tensor x的具体值,或者是其shape,slice,甚至是函数。
第三个输入message用来标识这一处打印,可以自定义字符串。
最后的summarize控制输出元素的数量,比如100就输出x的前100个元素。
对于新版的TensorFlow,使用tf.print,语法如下:
print_op = tf.print(x)
with tf.control_dependencies([print_op]):
out = tf.add(x, x)
sess.run(out)
很方便吧?
虽然不如直接在PyCharm中设置断点方便,但能把tensor打印出来定位问题也就容易多了。当然,如果是学习代码,想单步跟踪,建议使用eager模式,这就和PyTorch的方式非常相近了,当然,牺牲的是运行效率。
联系我:
邮箱guanxs_ai@126.com
微信公众号:AI人工智能与大数据
TensorFlow调试技巧相关推荐
- 转:Python 代码调试技巧
Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html
- 你可能不知道的 IDEA 高级调试技巧
作者:十光年 www.cnblogs.com/jun1019/p/9741224.html 一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图, ...
- Javascript调试技巧整理
整理一下网上看到的实用调试技巧! 1. 不要使用alert 首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object ...
- iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决
http://mobile.51cto.com/iphone-279455.htm XCode调试技巧之EXC_BAD_ACCESS中BUG解决是本文要介绍的内容,在iphone开发的时候EXC_BA ...
- Flutter调试技巧总结——高效开发的秘密
刚开始学前端的时候看到大家都是用的console.log()作为调试的手段,也可以说,很多人只会用console.log().在学习Flutter开发app的时候,我就在思考,除了使用print()来 ...
- [Cocoa]XCode的一些调试技巧
XCode的一些调试技巧 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 XCode 内置GDB,我 ...
- 你所不知道的 Android Studio 调试技巧
Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug,进而解决,可是我们的看家本领.正所谓,工欲善其事必先利其器,和其他开发工具一样, ...
- Postman 调试技巧
Postman 调试技巧 最为一个最基础的猿,我相信你已经掌握的一般接口使用Postman请求了. 如果你还在为下面问题发愁,你可以读下去. 1.后台验证通过请求header中的动态token. 2. ...
- 反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......
反调试技巧总结-原理和实现 -------------------------------------------------------------------------------------- ...
最新文章
- 制作rhel的yum仓库
- linux问题排查常用命令详解
- pythonrequest得替代_Python爬虫通过替换http request header来欺骗浏览器实现登录功能...
- Google Guava库必需品
- 针对IE的CSS hack 全面 实用
- scrum项目协作是什么_什么是小型Scrum?
- Linux学习笔记(七)Linux常用命令:挂载命令
- Axure RP 9基础教程(3)——添加图标元件
- 网页设计软件列表HTML,【网站设计用什么软件】网页设计软件具体有哪些,常见的十种网页设计软件介绍!...
- Windows官方镜像大全---【内附网盘链接】
- CImageList用法介绍
- 多语言国家与缩写映射表
- 使用js实现百度地图与高德地图经纬度的转换
- 计算思维不是计算机科学的核心素养,信息技术学科核心素养
- Revealing the Invisible with Model and Data Shrinking for Composite-database Micro-expression Recogn
- 记一次线上OOM问题分析与解决,涨知识了!
- linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法
- C语言-函数-学会方程你的数学能力会乘风破浪突飞猛进-学会函数你的编程能力将百尺竿头更进一步
- Altium Designer 导入PCB库
- Java鸡兔同笼问题