TensorFlow 基础:TensorFlow Debug
TensorFlow 调试器(TFDebug)
TensorFlow 调试器(tfdbg) 是专门为TensorFlow定制的调试器。
在训练或推理的过程中能够让你看到流图的内部结构及状态,由于tensorflow的计算图,使用通常的调试器(如pdb)是看不到的。
TFDebug使用
用TFDebug包装tensorflow会话(session)需要增加如下的代码:
# 第一行: 引包
from tensorflow.python import debug as tf_debug
sess = tf.Session()
# 初始化的 sess 没必要加上 debug wrapper
sess.run(tf.global_variables_initializer())
# 第二行,给 session 加个 wrapper
debug_sess = tf_debug.LocalCLIDebugWrapperSession(sess=sess)
debug_sess.run(train_op) # 用 加了 wrapper 的 session,来代替之前的 session 做训练操作
我直接把当前session变成了debug session
self.sess = tf_debug.LocalCLIDebugWrapperSession(self.sess)
用tf_debug.LocalCLIDebugWrapperSession重新包装一下sess,这个包装器提供如下特性;
(1) 在Session.run()之前引进CLI命令行调试接口,能够让你控制程序的执行和监视图的内部状态。
(2) 允许你自己定义特殊的filters 来监视某个tensor(张量)的值,可以帮助诊断bug。
核心的几个命令是:
run :执行一次 debug_session.run() , 这次执行产生中间 tensor 的值都可以通过 debug 界面查看
exit : 退出 debug
注意事项
debug 的 wrapper 要加在 执行 train_op 的 session 上,因为要 debug 的是 train 过程。
但是如果是想 debug input-pipeline 的话,感觉是可以将 wrapper 加在 执行 input-pipeline 的 session 上的(没有测试过)。
如果代码中使用了 input-pipeline 的话, debug 非常慢(不知道原因是啥)
参考资料
https://www.tensorflow.org/programmers_guide/debugger
还没有评论,来说两句吧...