tensorflow调试小技巧总结

        Debugging 是程序员必备技能,TensorFlow 程序员也不例外。然而 TensorFlow 的运行模式是先构造一张 graph,再执行 session.run(),这就为调试带来一些困难。普通调试工具如 pdb 只能看到 graph 外部的变量和控制流程,无法深入 graph 内部一探究竟。

几种常用方法:

1.通过Session.run()获取变量的值

2.利用Tensorboard查看一些可视化统计

3.使用tf.Print()和tf.Assert()打印变量

4.使用Python的debug工具: ipdb, pudb

5.利用tf.py_func()向图中插入自定义的打印代码, tdb

6.使用官方debug工具: tfdbg

 

>>tf的eager模式与graph模式(https://zhuanlan.zhihu.com/p/47201474

eager 模式就是类似于 python 这样的命令式编程,写好程序之后,不需要编译,就可以直接运行了,而且非常直观;而之前的静态图模式则类似于 c/c++ 的声明式编程。写好程序之后要先编译,然后才能运行。

官方给的建议是:同时写 eager 模式代码和 graph 模式代码,使用 eager 模式快速调试和 debug,然后利用 graph 模式在分布式训练方面的优势部署;

 

>>tfdbg:

(1)导包

from tensorflow.python import debug as tfdbg

(2)封装原会话,添加过滤规则

   sess = tfdbg.LocalCLIDebugWrapperSession(sess)                      # 被调试器封装的会话 
   sess.add_tensor_filter("has_inf_or_nan", tfdbg.has_inf_or_nan)      # 调试器添加过滤规则

(3)查看图中节点信息

》run   ##运行图
》pt *** ##查看tensor详情
》ni *** ##查看节点信息(包含前后节点)
》ls 命令可以查看创建节点的框架源码
》run -f has_inf_or_nan 使用该过滤器,检查运行时的 tensor 出现 NaN 或 Inf 的情况。

 

>>error处理

当你的cuda和cudnn都load成功时,

依然出现了cudnn failed to initialize错误

这时候你需要做的是指定tensorflow对gpu的使用率,

###设定使用率不超过50%
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.5)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

###设定使用率按需增长
session_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
sess = tf.Session(config=session_config)

但是如果cuda与cudnn load 失败时,则需要考虑cuda与cudnn安装是否成功!

 

 

参考链接:

1、https://www.cnblogs.com/huangshiyu13/p/6721805.html

2、https://www.cnblogs.com/hellcat/articles/7812119.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值