调试Tensorflow挂起全局变量初始化

时间:2017-08-17 07:54:37

标签: python tensorflow

我正在接受有关如何调试Tensorflow在挂起时遇到的问题的建议。

我有一个挂在global_variables_initializer()上的多层CNN在会话中运行。我在控制台输出上没有收到任何错误或消息。

是否有一种智能方式可以调试Tensorflow在挂起时遇到的问题,而不是反复注释掉生成图表的代码行,并重新运行以查看它挂起的位置。 TensorFlow调试器(tfdbg)会有帮助吗?我有什么选择?

理想情况下,仅仅打破当前执行并查看某些堆栈或类似内容以查看init期间执行挂起的位置会很棒。

我目前正在Jupiter笔记本中使用Python 3运行Tensorflow 0.12.1。

2 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。来自@ amo-ej1的提示在常规文件中运行是朝着正确方向迈出的一步。这揭示了张量流程正在用SIGKILL自杀,并返回错误代码137.

我尝试了Tensorflow Debugger tfdbg 虽然这没有提供任何进一步的细节,因为问题是图形没有初始化。我开始认为图形结构不正确,所以我使用以下方法抛出图形结构: tf.summary.FileWriter('./logs/traing_graph', graph)

然后我用Tensorboard检查从目录中转出的结果汇总图结构数据,发现完全连接层的张量尺寸错误,宽度为1500万!! !! (

事实证明,图表的其中一个可配置参数不正确。它正在从错误的寻址前一个tf.shape类型属性中错误地选择第2层张量形状的尺寸,并且它展开了图形的尺寸。

/var/log/system.log中没有OOM错误消息,所以我不确定为什么图初始化导致python tensorflow脚本进程死亡。

我修复了图形的尺寸,图形初始化工作正常!

我的顶级提示是在初始化和训练之前使用Tensorboard可视化您的图形,以快速检查您编码的结果图形结构,使其符合您的预期。你可能会节省很多时间! : - )

答案 1 :(得分:0)

调试张量流的常用方法是用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.你可以使用eval - varaible_name.eval(sessnio = sess)