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

Ste*_*t_R 5 tensorflow tensorflow-datasets

精简版:

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

规格:

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

  1. 读取一组本地存储的图像文件路径(不同尺寸的图像)
  2. 从 csv 中读取一组建议的“边界框”
  3. 生成所有图像路径到边界框组合的集合
  4. 读取和解码图像,然后使用这些组合中的每一个生成一组“裁剪”图像 tf.image.crop_to_bounding_box

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

tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [width must be >= target + offset.]
Run Code Online (Sandbox Code Playgroud)

这会杀死会话。

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

(我知道针对这个特定问题的正确解决方法是花时间检查每个边界框和图像尺寸大小是否可能在之前的步骤中进行,并filter在进行map裁剪操作之前使用操作将它们过滤掉。我想知道如果有一种简单的方法可以忽略错误并转到下一个案例,以便在这种特定情况下和更一般的情况下易于实现)

fsa*_*san 6

对于张量流 2

dataset = dataset.apply(tf.data.experimental.ignore_errors())
Run Code Online (Sandbox Code Playgroud)


xdu*_*ch0 5

tf.contrib.data.ignore_errors。我自己从未尝试过,但根据文档,用法很简单

dataset = dataset.map(some_map_function)
dataset = dataset.apply(tf.contrib.data.ignore_errors())
Run Code Online (Sandbox Code Playgroud)

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