tf。如果图表损坏,则打印无法正常工作

时间:2018-08-03 07:51:37

标签: python debugging tensorflow

我正在尝试构建一个完全卷积的神经网络。我的问题是,在某个阶段,张量的形状不再匹配,导致和Exception异常,我想在每个步骤之后打印张量的形状,以查明问题所在。但是问题是,如果图形损坏并且某个时刻引发了异常,则tf.Print似乎无法打印任何内容(即使异常发生在管道中的print语句之后)。我在打印中使用以下代码。如果我有一个有效的图形,它可以正常工作。那么,tf.Print真的只能用于工作图吗?如果是这种情况,我该如何打印张量的形状,还是使用某些调试器(例如tfdbg)的唯一可能性?

upsample = custom_layers.crop_center(input_layer, upsample)
upsample_print = tf.Print(upsample, [tf.shape(upsample)], "shape of tensor is ")
logits = tf.reshape(upsample_print, [-1, 2])
...

给出的错误是

ValueError: Dimension size must be evenly divisible by 2898844 but is 2005644 for 'gradients/Reshape_grad/Reshape' (op: 'Reshape') with input shapes: [1002822,2], [4] and with input tensors computed as partial shapes: input[1] = [?,1391,1042,2].

2 个答案:

答案 0 :(得分:0)

尝试print(upsample.get_shape())

答案 1 :(得分:0)

tf.Print仅在运行时打印。它只是向图添加一个节点,该节点在执行时将一些内容打印到控制台。因此,如果您的图形无法构建,即无法执行任何计算,那么您将永远不会看到tf.Print的输出。

在构造时,您只能看到张量的静态形状(例如,使用Python本机打印语句打印它们)。我不知道在构造时获取动态形状的任何方法(动态形状取决于您提供的实际输入,因此无法在实际提供某些东西之前就知道,这只会在运行时发生)。了解静态形状通常足以满足我的目的。如果您不是这种情况,请尝试在一个玩具示例中将动态尺寸设为静态,然后用Python打印所有形状以找出问题所在。