使用官方tfdbg对tensorflow调试

使用官方的tfdbg进行调试,使用的方式很简单三句话完成:
第一句声明:
from tensorflow.python import debug as tf_debug
第二句:对会话封装
sess = tf_debug.LocalCLIDebugWrapperSession(sess)
第三句:过滤(可选)
sess.add_tensor_filter(“has_inf_or_nan”, tf_debug.has_inf_or_nan)
如此以来,每次只要调用该会话的run()属性,就会进入debug.
你最好把这个代码存成.py,然后在终端执行。

具体的做法是:

 1     def train(self, dataset):
 2         log_out('****EPOCH {}****'.format(self.training_epoch), self.Log_file)
 3         self.sess.run(dataset.train_init_op) 
 4         while self.training_epoch < self.config.max_epoch:
 5             t_start = time.time()
 6             try:
 7                 ops = [self.train_op,
 8                        self.extra_update_ops,
 9                        self.merged,
10                        self.loss,
11                        self.logits,
12                        self.labels,
13                        self.accuracy]
14                 
15                 debug_sess = tf_debug.LocalCLIDebugWrapperSession(self.sess) 
16                 debug_sess.run(ops)  
17 
18                 _, _, summary, l_out, probs, labels, acc = self.sess.run(ops, {self.is_training: True})
19   

在第18句之前加上15、16两句。然后在终端运行训练文件。会出现如下的画面:

然后输入s进行单步调试。

单步执行的话就用鼠标点击上面的“invoke stepper”,单步执行。如果不知道怎么进行单步执行,那么就输入命令“help”自己去看文档就是啦!单步就是按”s”,估计就是step的意思。

核心的几个命令是:

  • run :执行一次 debug_session.run() , 这次执行产生中间 tensor 的值都可以通过 debug 界面查看
  • exit : 退出 debug

当执行单步调试的时候,每执行一步单步调试,箭头都会下移一行,此时箭头所指向的变量的值会在下面显示。


参考1:https://blog.csdn.net/lucky7213/article/details/78975861

参考2:https://blog.codescv.com/debug-tf-using-tfdbg.html

参考3:https://tensorflow.juejin.im/programmers_guide/debugger.html

原文地址:https://www.cnblogs.com/yibeimingyue/p/15133557.html