天天看點

Tensorflow之調試(Debug)及列印變量

參考資料: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)及列印變量

類:

2.利用Tensorboard檢視一些可視化統計

Tensoboard簡單使用方法:

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

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