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



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

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

有没有一种智能的方法来调试 Tensorflow 在挂起时正在努力解决的问题,而不是重复注释掉制作图形的代码行,然后重新运行以查看它挂起的位置。TensorFlow debugger (tfdbg( 会有所帮助吗?我有哪些选择?

理想情况下,只是中断当前执行并查看一些堆栈或类似内容以查看在初始化期间执行挂起的位置会很棒。

我目前正在Jupiter笔记本中运行带有Python 3的Tensorflow 0.12.1。

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

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

然后我用Tensorboard检查了从目录中转储出来的汇总图结构数据,发现全连接层的张量维数是错误的,宽度为1500万!?!((

事实证明,图形的一个可配置参数不正确。它错误地从以前的 tf.shape 类型属性的错误寻址中选择了第 2 层张量形状的维度,并分解了图形的维度。

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

我修复了图形的尺寸,图形初始化工作得很好!

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

调试 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.您可以使用 eval -varaible_name.eval(sessnio=sess(

最新更新