Tensorflow之调试(Debug)及打印变量

时间:2023-01-13 10:59:50

参考资料:https://wookayin.github.io/tensorflow-talk-debugging

几种常用方法:

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

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

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

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

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

6.使用官方debug工具: tfdbg

复习:

tensorflow是通过先建图再运行的方式进行运行,这就使得我们写在图建立过程中的输出语句在图运行的时候并不能得到执行,从而使得调试困难. 我们想在运行过程中,对训练的一些变量进行追踪和打印,对一些错误进行输出分析,下面介绍几种在tensorflow中进行debug的方法.

详细介绍:

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

一个简单的例子:

Tensorflow之调试(Debug)及打印变量

优点:简单易行

缺点:必须要在图中保持需要观察的变量,必须要进行一次完整的运行

比如我们要获取各个层的输出,会变得很繁琐:

Tensorflow之调试(Debug)及打印变量

可以通过词典或者新建一个类来改善这一情况:

词典:

Tensorflow之调试(Debug)及打印变量

类:

Tensorflow之调试(Debug)及打印变量

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

Tensoboard简单使用方法:http://www.cnblogs.com/huangshiyu13/p/7562990.html

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

Tensorflow之调试(Debug)及打印变量

一个简单例子:

Tensorflow之调试(Debug)及打印变量

在前7次迭代中,它会输出预测的label,如下图所示:

Tensorflow之调试(Debug)及打印变量

缺点:函数过于简单,没法在满足一定条件下进行输出,或者隔多少次迭代才进行一次输出.

Tensorflow之调试(Debug)及打印变量

这个函数在condition等于False的时候进行输出data的值,并且抛出异常,summarize决定输出多少变量值

使用方法:

Tensorflow之调试(Debug)及打印变量

或者可以:

Tensorflow之调试(Debug)及打印变量

或者把所有的Assert操作加入collection:

Tensorflow之调试(Debug)及打印变量

官方也提供了一些assert相关的函数: https://www.tensorflow.org/versions/r0.12/api_docs/python/check_ops.html#asserts-and-boolean-checks

Tensorflow之调试(Debug)及打印变量

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

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

Tensorflow之调试(Debug)及打印变量

简单例子:

Tensorflow之调试(Debug)及打印变量

另一个例子:

Tensorflow之调试(Debug)及打印变量

一个第三方debug工具: https://github.com/ericjang/tdb

Tensorflow之调试(Debug)及打印变量

6.使用官方debug工具: tfdbg