TensorFlow 数据集 `.map` - 是否可以忽略错误?

TensorFlow Dataset `.map` - Is it possible to ignore errors?

简短版本:

使用数据集 map 操作时,是否可以指定任何 map 调用导致错误的 'rows' 被悄悄过滤掉,而不是让错误冒出来并终止整个会话?

细节:

我设置了一个输入管道(或多或少)执行以下操作:

  1. 读取本地存储的一组图片文件路径(不同尺寸的图片)
  2. 从 csv
  3. 中读取一组建议的 'bounding boxes'
  4. 生成边界框组合的所有图像路径集
  5. 读取并解码图像,然后使用 tf.image.crop_to_bounding_box
  6. 为每个组合生成 'cropped' 图像集

我的问题是,在某些情况下(非常罕见)我建议的边界框在给定图像的边界之外,因此(可以理解)tf.image.crop_to_bounding_box 会抛出如下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [width must be >= target + offset.]

这会终止会话。

如果这些错误被简单地忽略并且管道移动到下一个组合,我会更喜欢它。

(我知道 correct 针对此特定问题的修复将花时间检查每个边界框和图像尺寸大小是否可能在之前的步骤中使用在通过裁剪操作到达 map 之前进行 filter 操作。我想知道是否有一种简单的方法可以忽略错误并继续下一个案例,以便于在这种情况下实现具体情况以及更一般的情况)

tf.contrib.data.ignore_errors。我自己从未尝试过,但根据 the docs 的说法,用法很简单

dataset = dataset.map(some_map_function)
dataset = dataset.apply(tf.contrib.data.ignore_errors())

它应该简单地传递输入(即 returns 相同的数据集),但忽略任何引发错误的输入。

对于 Tensorflow 2

dataset = dataset.apply(tf.data.experimental.ignore_errors())