我想养一个 tf.errors.InvalidArgumentError
异常依赖于图模式下输入张量的值(在TensorFlow服务中)。
目前我使用 tf.debugging.assert_all_finite
就可以正常工作了。由于我不是为了检查bug而进行断言,而是根据输入引发异常,所以最好是引发一个显式异常。
我的问题归结为
正确的做法是什么?
编辑:再详细说说。我想在不使用tf.debugging的情况下重新创建以下逻辑(除非这其实是正确的方法)。
目前我正在检查是否有 NaN
这样的值。
assert_op = tf.debugging.assert_all_finite(
input_data,
'Cant have nans at beginning or end'
)
你通过邮件给我写信,这可能与以下问题有关。这个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
得到执行。