2017-08-17 42 views
0

我提出了關於如何調試Tensorflow在掛起時遇到的問題的建議。調試Tensorflow掛在全局變量初始化

我有一個掛在global_variables_initializer()會話中運行的多層CNN。我在控制檯輸出上沒有收到錯誤或消息。

是否有一種智能的方式來調試Tensorflow在掛起時掙扎的方式,而不是反覆註釋出使圖形生成的代碼行,並重新運行以查看它掛起的位置。 TensorFlow調試器(tfdbg)有幫助嗎?我有什麼選擇?

理想情況下,僅僅打破當前的執行並查看一些堆棧或類似的內容以查看init執行過程中掛起的位置會很好。

我目前在Jupiter筆記本中使用Python 3的Tensorflow 0.12.1。

+1

調試tensorflow時要記住,tensorflow的C++部分可能會吐出一些警告/錯誤消息給標準輸出,你的jupyter筆記本會記下capture/display。 –

+0

@ amo-ej1我已經完成了你的建議。這個unocerd也有一些錯字錯誤。問題依然存在,但現在我還有一個線索,python tensorflow與返回碼137和SIGKILL(9)信號一起存在。 – neurozen

回答

0

我設法解決這個問題。來自@ amo-ej1的提示以正常文件運行是朝正確方向邁出的一步。這揭露了張量流動過程中殺死自己關閉了SIGKILL和返回的137

錯誤代碼我試圖Tensorflow調試tfdbg雖然這並沒有提供任何進一步的細節的問題圖形未初始化。我一開始以爲圖形結構是不正確的,所以我甩了使用圖形結構: tf.summary.FileWriter('./logs/traing_graph', graph)

然後我用了Tensorboard檢查的結果彙總圖結構數據甩出來的目錄,發現張量尺寸完全連接層錯了,寬度爲1500萬!! !!? (錯誤

原來,圖中的一個可配置參數不正確。它正確地從錯誤地尋址tf.shape類型屬性中挑選第2層張量形狀的尺寸,並且它分解了圖形的尺寸。

/var/log/system.log中沒有OOM錯誤消息,因此我不確定爲什麼圖初始化導致python tensorflow腳本進程死亡。

我修復了圖形的尺寸和圖形初始化工作得很好!

我的最高技巧是在初始化和訓練之前用Tensorboard可視化您的圖形,以便快速檢查您編碼的結果圖結構,它與您的預期結果相同。你可能會節省很多時間!:-)

0

調試tensorflow的常用方法是用numpy數組替換佔位符和/或變量,並將它們放入tf.const中。當你這樣做的時候,你可以通過設置一個斷點並在「pythoninc」中查看數字,而不僅僅是張量來檢查你的代碼的邏輯。這將是更容易幫助你,如果你會在這裏發表您的代碼,但這裏是一個虛擬的例子:

with tf.name_scope('scope_name'): 
    ### This block is for debug only 
    import numpy as np 
    batch_size = 20 
    sess = tf.Session() 
    sess.run(tf.tables_initializer()) 
    init_op = tf.global_variables_initializer() 
    sess.run(init_op) 
    ### End of first debug block 

    ## Replacing Placeholders for debug - uncomment the placehlolders and comment the numpy arrays to producation mode 
    const_a = tf.constant((np.random.rand(batch_size, 26) > 0.85).astype(int), dtype=tf.float32) 
    const_b = tf.constant(np.random.randint(0, 20, batch_size * 26).reshape((batch_size, 26)), dtype=tf.float32) 
    # real_a_placeholder = tf.log(input_placeholder_dict[A_DATA]) 
    # real_b_placeholder = tf.log(input_placeholder_dict[B_DATA]) 

    # dummy opreation 
    c = a - b 

    # selecting top k - in the sanity check you can see here that you actullay get the top items and top values 
    top_k = 5 
    top_k_values, top_k_indices = tf.nn.top_k(c, 
                        k=top_k, sorted=True, 
                        name="top_k") 
    ## Replacing Variable for debug - uncomment the variables and comment the numpy arrays to producation mode 

現在,斷點運行你的代碼,你有2個選項,看看在調試器的值: 1. sess.run(palceholder_name 2.you可以使用eval - varaible_name.eval(sessnio = SESS)

+0

我試過你的建議,儘管我已經將錯誤本地化爲tf.global_variables_init()。返回代碼137和SIGKILL 9退出Tensorflow。 – neurozen

+0

1.您可以分享您的代碼嗎? 2.你是否試圖將它作爲普通的python文件運行,而不是Ipython筆記本? –