如何在TensorFlow图中正确引发异常?

问题描述 投票:2回答:1

我想养一个 tf.errors.InvalidArgumentError 异常依赖于图模式下输入张量的值(在TensorFlow服务中)。

目前我使用 tf.debugging.assert_all_finite 就可以正常工作了。由于我不是为了检查bug而进行断言,而是根据输入引发异常,所以最好是引发一个显式异常。

我的问题归结为

  • 如何有条件地执行不返回张量的代码?
  • 如何引发tf.errors异常。

正确的做法是什么?

编辑:再详细说说。我想在不使用tf.debugging的情况下重新创建以下逻辑(除非这其实是正确的方法)。

目前我正在检查是否有 NaN 这样的值。

assert_op = tf.debugging.assert_all_finite(
    input_data,
    'Cant have nans at beginning or end'
)
python python-3.x tensorflow tensorflow2.0 tensorflow-serving
1个回答
1
投票

你通过邮件给我写信,这可能与以下问题有关。这个TF的问题是关于在图执行中捕获异常的问题。此相关问题. 不过,我不太确定这是否真的和你有关。这个TF的问题和SO的问题是关于如何动态地? 捕捉 异常,所以基本上实现了 try: ... except: ... 在TF图中。

其他引入控制结构的TF功能有。

  • tf.while_loop
  • tf.cond

tf.cond 就是回答你的问题如何有条件地执行代码。根据一个条件,即一个 bool 标量。但也许这不是你真正的问题,而是如何制定条件?

tf.check_numerics 它将检查infnan的张量,如果发现这样的张量就抛出一个异常。

如果你想把它作为一个条件,你可以使用这个代码。

is_finite = tf.reduce_all(tf.is_finite(x))

如果你想在某些条件不为真时抛出异常,你可以这样做。

check_op = tf.Assert(is_finite, ["Tensor had inf or nan values:", x])

你可能想使用 tf.control_dependencies 以确保这一行动 check_op 得到执行。

© www.soinside.com 2019 - 2024. All rights reserved.