python - 如果图表损坏,tf.Print 不起作用
问题描述
我正在尝试构建一个完全卷积的神经网络。我的问题是,在某个阶段,张量的形状不再匹配,导致异常,我想在每个步骤之后打印张量的形状,以便能够查明问题。然而问题是,如果图形被破坏并且在某个时候抛出异常(即使异常发生在管道中的 print 语句之后),tf.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].
解决方案
tf.Print
仅在运行时打印。它只是将一个节点添加到图形中,该节点在执行时会向控制台打印一些内容。因此,如果您的图表无法构建,即无法执行任何计算,您将永远不会看到tf.Print
.
在构建时,您只能看到张量的静态形状(例如,使用 Python 原生打印语句打印它们)。我不知道在构建时获取动态形状的任何方法(动态形状取决于您提供的实际输入,因此在您实际提供某些东西之前无法知道这一点,这只发生在运行时)。对于我的目的而言,了解静态形状通常就足够了。如果您不是这种情况,请尝试在玩具示例中将动态尺寸设为静态,然后 Python 打印所有形状以追踪问题。
推荐阅读
- asp.net - Razor 页面独立地向每个控制器发布表单
- python - 使用 __init__.py 从目录导入本地 python 模块
- javascript - 尝试从 UWP WebView 获取 html 时出现异常(HRESULT 异常:0x80020101)
- batch-file - Windows 目录正在提供 .. & . 在某些目录的输出中,但不是在其他目录中。如何始终排除父目录?
- c++ - 在 Visual Studio 中检查内存转储时匿名命名空间中的符号
- c++ - 无法使用 CMake 编译 wxWidgets
- laravel - 使用 AWS S3 文件上传将 Laravel 应用程序部署到 Elastic Beanstalk 时出错
- ckeditor - 检查用户在 CKEditor 4 contextMenu 中单击的元素
- python-3.x - 无论python数据框中的顺序如何,都删除具有相同信息的行
- database - SQL 错误 (1064):您的 SQL 语法有错误